이것은 다중 스레드 시나리오의 예외 처리 시나리오를위한 것입니다. 필요할 때마다 상호 배제하에 잠겨있는 일부 공유 리소스에서 둘 이상의 스레드가 병렬로 작업하고 있습니다. 한 스레드가 예외 상황에 직면하면 sem_trywait를 사용하여 다른 스레드가 세마포어를 기다리고 있는지 확인하고 일부 스레드가 세마포어를 기다리고 있다면 예외가 발생한 플래그를 사용하고 sem_post를 실행합니다. 대기 스레드는 기다리지 않고 계속 진행하기 전에 예외가 발생했는지 확인합니다. 예외가 발생하면, 다른 대기 스레드는 이제 정상 종료를 향해 진행합니다. 제발 제안 해주세요. 내 실제 질문은 : sem_trywait을 사용할 수 있습니까?누군가가 공유 세마포어를 기다리고 있다면 C Posix 스레드를 체크인하는 방법은 무엇입니까?
1
A
답변
2
가장 간단한 해결책은 스레드 상태의 추가 메커니즘을 설정하는 것입니다. 세마포어는 누군가 기다리고 있는지 여부를 나타내는 것이 아닙니다. 일부 스레드가 세마포어를 기다리는 및 0
없는 경우 경우에만 스레드에 의해 작성되어 전 세계적으로 볼 변수에
이 —로 설정이 1
—을 말한다. 스레드가 세마포어를 얻고 자하는지 알고 싶다면 변수의 상태를 확인하십시오. 작업을 올바르게 정렬하여 변수를 샘플링하는 경쟁 조건을 처리하는 것이 너무 어렵지 않아야합니다.
실제 질문은 무엇입니까? –
@ammoQ, sem_trywait를 사용하여 확인할 수 있습니까? ...? –
세마포어를 얻는 것뿐입니다. 다른 사람이 기다리고 있는지 알려주지 않습니다. – wallyk