Aqu*_*irl 3 mutex pthreads condition-variable
据说需要Mutex来保护条件变量.
这里引用的是实际条件变量声明为pthread_cond_t
OR
的正常共享变量,count其值决定信令并等待.
?
在这里引用声明为pthread_cond_t的实际条件变量或正常的共享变量count,其值决定信号并等待?
两者都是参考.
互斥体使得count可以检查共享变量(在您的问题中),并且如果该变量的值不满足期望条件,则内部执行的等待pthread_cond_wait()将相对于该检查以原子方式发生.
使用互斥锁解决的问题是您有两个需要原子的独立操作:
countpthread_cond_wait()如果条件尚未满足则等待insode .A pthread_cond_signal()不会'持久' - 如果没有线程在等待pthread_cond_t对象,则信号什么都不做.因此,如果没有互斥体使上面列出的两个操作相对于彼此处于原子状态,您可能会发现自己处于以下情况:
count非零的事情线程B将在其递增时发出信号count(将设置count为零以外的其他值)
count并发现它为零pthread_cond_wait(),线程"B"出现并递增count到1并调用pthread_cond_signal().该调用实际上没有任何后果,因为"A"还没有等待pthread_cond_t对象.pthread_cond_wait(),但由于不记住条件变量信号,它将在此时阻塞并等待已经过去的信号.互斥体(只要所有线程都遵循规则)使得项目#2不能在第1项和第3项之间发生.线程"B"有机会增加的唯一方法count是在A查看之前count或之后"A"已在等待信号.
| 归档时间: |
|
| 查看次数: |
2826 次 |
| 最近记录: |