pthread_mutex_t and pthread_cond 混合使用
2016-03-21 10:37
513 查看
pthread_mutex_t count_lock;
pthread_cond_t count_nonzero;
int32_t _count = 0;
void * decrement_count(void *arg)
{
pthread_mutex_lock (&count_lock);
printf("decrement_count get count_lock\n");
while (_count == 0)
{
printf("decrement_count count == 0 \n");
printf("decrement_count before cond_wait \n");
pthread_cond_wait( &count_nonzero, &count_lock);
printf("decrement_count after cond_wait \n");
}
_count = _count -1;
pthread_mutex_unlock (&count_lock);
pthread_exit(nullptr);
}
void * increment_count(void *arg)
{
pthread_mutex_lock(&count_lock);
printf("increment_count get count_lock\n");
if (_count==0)
{
printf("increment_count before cond_signal\n");
pthread_cond_signal(&count_nonzero);
printf("increment_count after cond_signal\n");
}
_count=_count+1;
pthread_mutex_unlock(&count_lock);
pthread_exit(nullptr);
}
int main(void)
{
pthread_t tid1,tid2;
pthread_mutex_init(&count_lock,NULL);
pthread_cond_init(&count_nonzero,NULL);
pthread_create(&tid1,NULL,decrement_count,NULL);
sleep(2);
pthread_create(&tid2,NULL,increment_count,NULL);
sleep(10);
while(1);
return 0;
}
pthread_cond_t count_nonzero;
int32_t _count = 0;
void * decrement_count(void *arg)
{
pthread_mutex_lock (&count_lock);
printf("decrement_count get count_lock\n");
while (_count == 0)
{
printf("decrement_count count == 0 \n");
printf("decrement_count before cond_wait \n");
pthread_cond_wait( &count_nonzero, &count_lock);
printf("decrement_count after cond_wait \n");
}
_count = _count -1;
pthread_mutex_unlock (&count_lock);
pthread_exit(nullptr);
}
void * increment_count(void *arg)
{
pthread_mutex_lock(&count_lock);
printf("increment_count get count_lock\n");
if (_count==0)
{
printf("increment_count before cond_signal\n");
pthread_cond_signal(&count_nonzero);
printf("increment_count after cond_signal\n");
}
_count=_count+1;
pthread_mutex_unlock(&count_lock);
pthread_exit(nullptr);
}
int main(void)
{
pthread_t tid1,tid2;
pthread_mutex_init(&count_lock,NULL);
pthread_cond_init(&count_nonzero,NULL);
pthread_create(&tid1,NULL,decrement_count,NULL);
sleep(2);
pthread_create(&tid2,NULL,increment_count,NULL);
sleep(10);
while(1);
return 0;
}
相关文章推荐
- weblogic中删除自动部署项目
- Vmware vSphere 6.0之在多台服务器上安装Platform与vCenter Server
- oracle表查询语句优化
- MySQL关联查询
- linux下stat详解--相关函数
- C++中delete和delete[]的区别
- 137. Single Number II
- Java day07 多态示例 主板接口
- tolua.cast的实用方法
- python学习:使用xml.dom.minidom读取xml文档内容
- 根据身份证号获取星座,生肖,性别
- 解决viewpager在刷新调用notifyDataSetChanged不起作用
- Linux下多线程编程遇到的一些问题
- 字符串常量存在何处
- Linux下多线程编程遇到的一些问题
- 字符串常量存在何处
- Linux查看当前网卡流量
- 12. Integer to Roman
- C# 基于SharpPcap的局域网数据包捕获 之二 监听代码
- br-lan、eth0、eth1及lo