Feeds:
Posts
Comments

Archive for February, 2010

pthread条件变量

pthread的条件变量的设计粗看显得有些奇怪。通常按如下方式使用:
等待线程
pthread_mutex_lock(&cond_lock);
while( [ condition is false] )
   pthread_cond_wait(&cond,&cond_mutex);
pthread_mutex_unlock(&cond_lock);
改变条件线程
pthread_mutex_lock(&cond_lock);
[ change condition ]
pthread_cond_signal(&cond);
pthread_mutex_unlock(&cond_lock);
这里需要用户自定义的锁来防止等待线程在计算条件的时候错过发送线程的signal的情况的发生,即对条件的读写几乎同时发生,而在等待线程进入cond_wait状态之前,条件已经变成真而且signal已发送的情形。锁的作用就是保证在等待线程在刚计算完条件还未进入sleep状态这一时段内条件不会被改变。至于while循环是为了处理等待线程被信号或其他意外事件唤醒。
Advertisements

Read Full Post »