여러 스레드로 구성된 첫 번째 구성 요소가 잠긴 잠금을 기다리고 두 번째 구성 요소가 잠금을 수신하고 잠금을 해제 할 때 두 구성 요소가 사용하는 잠금을 구현할 수있는 방법이 있습니까? 신호를 기다리는 다른 모든 스레드에 신호를 보냅니 까?잠금 해제시 여러 스레드를 알리는 하나의 잠금
크로스 플랫폼이어야하며 (C로 구현 됨)
그런 것들을 디자인 할 방법이 있습니까?
여러 스레드로 구성된 첫 번째 구성 요소가 잠긴 잠금을 기다리고 두 번째 구성 요소가 잠금을 수신하고 잠금을 해제 할 때 두 구성 요소가 사용하는 잠금을 구현할 수있는 방법이 있습니까? 신호를 기다리는 다른 모든 스레드에 신호를 보냅니 까?잠금 해제시 여러 스레드를 알리는 하나의 잠금
크로스 플랫폼이어야하며 (C로 구현 됨)
그런 것들을 디자인 할 방법이 있습니까?
대상 시스템이라고 가정 할 때 POSIX 및 Windows 시스템에서 사용할 수있는 교차 플랫폼 솔루션은 하나도 없습니다.
사용법
#include <pthread.h> int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond);
설명
이 기능이 해제된다 스레드 : POSIX의 시스템에서
모든 대기 스레드를 해제하는 조건 변수를 사용하고pthread_cond_broadcast()
전화 조건 변수에서 차단되었습니다.... Windows에서
pthread_cond_broadcast()
함수는 현재cond
변수 지정된 조건에서 차단 모든 스레드를 차단한다.
, you can use WakeAllConditionVariable :
웨이크 지정된 조건 변수를 기다리는 모든 스레드.
구문
C++
VOID WINAPI WakeAllConditionVariable( _Inout_ PCONDITION_VARIABLE ConditionVariable );
그것은 Windows에서 POSIX 시스템 및 Windows 조건 변수에 POSIX 조건 변수를 래핑 자신의 크로스 플랫폼 조건 변수 래퍼를 작성하는 것을 어렵지 않다 시스템.
쿨, 그게 내 문제를 해결하는 것 ..이 상태 변수가 작동하려면 각 스레드에 대한 잠금을 생성해야합니다 (아무 것도하지 않겠습니다). 그런데 이러한 조건 변수에 대한 시간 제한 메커니즘이 있습니까 (POSIX?) – Drxxd
Nvm, "pthread_cond_timedwait"가 조건 변수에 시간 초과가 있으며 여전히 잠금을 사용해야하는 것으로 보입니다. 아무것도하지 마세요. – Drxxd
POSIX 조건 변수에 필요한 뮤텍스는 "아무 것도하지 않습니다". POSIX 조건 변수를 사용하는 방법에 대한 많은 예가 있습니다 : https://www.google.com/search?q=pthread_cond_wait+example –
대기중인 경우 해당 스레드에 신호를 보내는 시점은 무엇입니까? – StoryTeller
자물쇠가 아닌 다른 것을하기 위해 자물쇠를 사용하지 마십시오. 신호를 보내려는 경우 세마포어, 조건 변수 또는 기타 적절한 것을 사용하십시오 –
이 스레드는 두 번째 구성 요소가 완료 될 때까지 기다리고 작업이 완료되면 계속 작업 할 수 있습니다. – Drxxd