Linux下的pthread_cond_t变量与Windows中的Event类似,都可以用于使子线程等待信号的变化,实现线程执行顺序的控制。
区别在于:pthread_cond_signal()仅使信号瞬间变化,而Event的SetEvent()可以使Event处于有信号状态,直至WaitForSingleObject()函数(自动事件)或者ResetEvent()函数(手动事件)
之前用pthread_cond_t实现了不会死锁的互斥锁
现在需要用pthread_cond_t实现类似Event的功能,以控制线程执行的顺序
其实背后的机制感觉没那么简单,有待研究
看看两个实现之间的相似性:
互斥锁:
pthread_mutex_lock();
while(bLocked)
pthread_cond_wait();
{
//确定锁定区域
......
}
pthread_cond_signal();
pthread_mutex_unlock();
bLocked=false;
控制线程的执行顺序:
等待:
pthread_mutex_lock();
pthread_cond_wait();
pthread_mutex_unlock();
发出信号:
pthread_mutex_lock();
pthread_cond_signal();
pthread_mutex_unlock();