条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发。一个常用的例子就是在线程中无限循环执行一个操作,但是这个操作并不是需要 一直执行而是在满足一定条件下执行。例如:

int changed = 0;

static pthread_mutext_t mtx = PTHREAD_MUTEX_INITALIZER;

static pthread_cond_t cond = PTHREAD_COND_INITALIZER;

void* thread_fun(void* argc)

{

while(true)

{

if(changed)

{

printf("i am changed");

}else

{

//方法一

sleep(1);

//方法二

pthread_mutex_lock(&mtx);

pthread_cond_wait(&cond,&mtx);

pthread_mutex_unloc(&mtx);

}

}

}

void main()

{

pthread_t threadId;

pthread_create(&threadId,NULL,thread_fun,NULL);

sleep(10);

changed = 1;

//方法二

pthread_cond_signal(&cond);

}

从上面的例子可以看出当changed变量为1的时候才执行操作,其他时间不执行,如果使用sleep函数,那么将会出现执行不及时的现象,如果使用条件锁的话那么会在条件改变的时候立即执行,效果比较好。

那如果使用条件锁呢?

首先是条件锁的创建,条件锁创建有两种方法,一种是静态方法,既使用静态变量的方式:

static pthread_cond_t cond = PTHREAD_COND_INITALIZER;

另外一种是动态的方法:

pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);

其次是等待: pthread_cond_wait,此方法可以加超时的时间,如果没有超时的时间则是一直等待。

再次是触发:当达到条件之后使用 pthread_cond_signal通知

但是在多线程里面必须要配合互斥锁,因为在多线程的条件下如果不使用互斥锁,那么就有可能同时多个执行ptread_cond_wait会造成混乱。

转载于:https://my.oschina.net/u/1013544/blog/1788088

最新文章

  1. iOS----- Crash 分析(文三)- 符号化崩溃日志
  2. [SharePoint] SharePoint 错误集 1
  3. PHP基础之 数组(二)
  4. python-haproxy作业讲解视频总结
  5. C# DEBUG 调试信息打印及输出详解
  6. bochs安装一系列问题
  7. spring整合freemarker 自定义标签
  8. Sublime 3114 + 转换GBK方法
  9. .NET中的 枚举
  10. iOS 导航控制器如何随意push和pop 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A
  11. HTTP缓存机制梳理
  12. css之float
  13. Linux流量监控工具使用总结 - iftop
  14. swith 语句详解
  15. RobotFramework 数据分离
  16. LR多分类推广 - Softmax回归*
  17. 关于mongodb按照字段模糊查询方法
  18. css---遮罩层
  19. linux配制DNS服务器基本能功能
  20. MATLAB中eig的作用

热门文章

  1. Python循环语句,对象
  2. 单芯片DP108USB声卡/音频解决方案完全替代CM108/CM108AH
  3. 微信小程序mpvue-动态改变navigationBarTitleText值
  4. Flask 入门(十三)
  5. "浮动按钮"组件:<fab> —— 快应用组件库H-UI
  6. NumPy学习1:基本概念
  7. Flutter 吐血整理组件继承关系图
  8. excel中存储的时间的类型是什么
  9. shell执行${var:m:n}报错Bad substitution解决办法
  10. Kubectl patch命令使用