2012-11-16

必须放在循环中的pthread_cond_wait

Views: 11969 | 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. 数据通信与传输协议基础
  2. 一种有趣的编程模型
  3. Master-Workers 模式处理高负载
  4. 我的网站PageRank会上升?
  5. 生产者消费者模型中生产者的速度快于消费者时所产生的问题及其解决方法讨论
Posted by ideawu at 2012-11-16 18:36:55

Leave a Comment