V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
thomaswang
V2EX  ›  问与答

条件变量问题,对消费者研究

  •  
  •   thomaswang · 2018-03-13 17:46:55 +08:00 · 937 次点击
    这是一个创建于 2441 天前的主题,其中的信息可能已经有所发展或是发生改变。
    void *decrement(void *arg) {
        while (1) {
            pthread_mutex_lock(&mutex); //加锁
            while (count <= 0) {
                printf("count<=0,thread1 is hanging!\n");
                pthread_cond_wait(&cond, &mutex); // 解锁,等信号,加锁
                sleep(1);
                printf("sleep!\n");
            }
            count = count - 1;
            pthread_mutex_unlock(&mutex); //解锁
        }
    }
    
    • 获得互斥锁(1),然后解锁(2),然后等待信号(3),等到信号之后加锁(4),然后进入临界区(5),然后解锁(6)
    • 会有多个消费者在等待这个信号,会有惊群现象吗?
    • 如果把 1,2 步骤去掉,貌似也是可行的
    2 条回复    2018-03-14 09:39:12 +08:00
    justinwu
        1
    justinwu  
       2018-03-14 00:20:30 +08:00
    你这个是多线程,又不是多进程,有啥好纠结 惊不惊群的,你这个条件变量还能多进程共享?
    再说了,条件变量通知分 pthread_cond_signal 和 pthread_cond_broadcast, 惊不惊群还不是由你。
    “如果把 1,2 步骤去掉”,咋个去法?
    if count > 0 : count-- 这样判断和操作,当然要完整锁起来。

    PS:生产者消费者代码贴全了,好研究一点,管中窥豹难免有误。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5609 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:54 · PVG 15:54 · LAX 23:54 · JFK 02:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.