2012-11-16

必须放在循环中的pthread_cond_wait

Views: 15511 | Add Comments

消费者线程(多个):

// *错误做法*
lock(my_lock){
    if(wait = 1){
        pthread_cond_wait(cond, my_lock);
    }
    wait = 1;
}

生产者线程:

lock(my_lock){
    wait = 0;
    pthread_cond_signal(cond);
}

由于在 if(wait=1) 之后和 pthread_cond_wait() 在之前, wait 有可能已经被其它消费者线程更改了.

所以, 必须把 pthread_cond_wait() 放在循环中:

// 正确做法
lock(my_lock){
    while(wait = 1){
        pthread_cond_wait(cond, my_lock);
    }
    wait = 1;
}

Related posts:

  1. C++ Latch 实现
  2. 数据通信与传输协议基础
  3. 一种有趣的编程模型
  4. Master-Workers 模式处理高负载
  5. 我的网站PageRank会上升?
Posted by ideawu at 2012-11-16 18:36:55

Leave a Comment