0
在Windows上的事件的情况下,如果没有线程正在等待,则事件对象的状态保持发信号通知。 pthread_cond_signal会发生什么情况,如果没有线程被阻塞,会发生什么情况?Windows和Mutex上的事件/条件用于实现等待事件的Posix上的变量,如果没有线程被阻塞,该怎么办?
在Windows上的事件的情况下,如果没有线程正在等待,则事件对象的状态保持发信号通知。 pthread_cond_signal会发生什么情况,如果没有线程被阻塞,会发生什么情况?Windows和Mutex上的事件/条件用于实现等待事件的Posix上的变量,如果没有线程被阻塞,该怎么办?
对于pthread_cond_signal()
...如果没有线程就在那个时候等待,没有发生,在所有什么 - 尤其是信号被完全遗忘,这是因为如果它有从来没有发生过。
恕我直言POSIX“条件变量”被错误地命名,因为名称暗示“条件变量”有一个值,并且假设该值可能收集未决信号是很自然的。没有东西会离事实很远。 (为此,您需要“信号灯”。)
与“条件”关联的“状态”是重要的。这需要等待“状态”的线程有一个特定的值会:
pthread_mutex_lock(foo_mutex) ;
while (...state not as required...)
pthread_cond_wait(foo_cond, foo_mutex) ;
...perhaps update the state...
pthread_mutex_unlock(foo_mutex) ;
哪些更新了“状态”,使得其他线程现在可以继续,将一个线程:
pthread_mutex_lock(foo_mutex) ;
...update the state...
if (...there may be a waiter...)
pthread_cond_signal(foo_cond) ;
pthread_mutex_unlock(foo_mutex) ;
NB:该标准明确允许启动一个,一些或所有的服务员......因此服务员中的while(...)
循环......以及“声称”信号需要更新状态的服务员,以便任何其他线程将循环在那while (...)