免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2577 | 回复: 3
打印 上一主题 下一主题

问个pthread条件变量使用的问题,看不明白 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-06 21:26 |只看该作者 |倒序浏览
下面的代码两个函数分别是两个线程,分别对一个共享变量进行递增操作和递减操作:
pthread_mutex_t count_lock;

pthread_cond_t count_nonzero;

unsigned count;

// thread one

decrement_count()
{
    pthread_mutex_lock(&count_lock);
    while (count == 0)
        pthread_cond_wait(&count_nonzero, &count_lock);
    count = count - 1;
    pthread_mutex_unlock(&count_lock);
}

// thread two

increment_count()
{
    pthread_mutex_lock(&count_lock);
    if (count == 0)
        pthread_cond_signal(&count_nonzero);
    count = count + 1;
    pthread_mutex_unlock(&count_lock);
}


有两个问题需要帮助:

1。 两个线程去修改一个变量,只用pthread_mutex不就行了么, 为什么还要用pthread_cond?
2。 使用pthread_cond_wait和pthread_cond_signal睡眠和唤醒的过程中,count_lock所有权在两个线程间是怎么迁移的?

谢谢解答 ;)

论坛徽章:
0
2 [报告]
发表于 2008-11-07 04:10 |只看该作者
增加线程每增加一次发个信号告诉减少现成一下pthread_cond_signal->pthread_cond_wait

pthread_cond_wait会暂时释放count_lock,等收到信号后在试图获得信号。

论坛徽章:
0
3 [报告]
发表于 2008-11-14 22:25 |只看该作者
确保在减少资源前,发现资源数为零,停止等待别的线程释放资源

论坛徽章:
0
4 [报告]
发表于 2008-11-17 21:21 |只看该作者
1.如果只用1个mutex,需要轮询条件,造成cpu资源浪费
2.pthread_cond_wait,进入睡眠状态后释放mutex,收到pthread_cond_signal后返回,占有mutex.

[ 本帖最后由 camperbird 于 2008-11-18 10:44 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP