举例来说,这边从某处读取数据到缓冲区,那边将缓冲区数据进行处理。

pthread_cond_t  data_cond;
pthread_mutex_t data_mutex;#define DATA_SIZE 4096
int   data_flag = 0;
int   data_size = 0;
char  data_buffer[DATA_SIZE];void read_to_databuffer()
{//init fdwhile (1){//已读取的数据还没有被处理,等待。或者用另外的条件锁?while (data_flag == 1){usleep(1000);continue;}pthread_mutex_lock(&data_mutex);data_size = read(fd, data_buffer, DATA_SIZE);//已经没有数据,中断。if (data_size <= 0){pthread_mutex_unlock(&data_mutex);break;}//设置数据标志,发出通知data_flag = 1;pthread_cond_signal( &data_cond);pthread_mutex_unlock(&data_mutex);}//release
}void databuffer_to_process()
{while (1){pthread_mutex_lock(&data_mutex);//没有数据,进入条件锁if (data_flag == 0){//有人问,两边都先lock……其实这里有一个先释放锁的动作。pthread_cond_wait(&data_cond, &data_mutex);}//处理数据//结束处理data_flag = 0;pthread_mutex_unlock(&data_mutex);}//release
}void start()
{pthread_t tid1, tid2;pthread_mutex_init(&data_mutex, NULL);pthread_cond_init( &data_cond,  NULL);pthread_create(&tid1, NULL, read_to_databuffer,    NULL);pthread_create(&tid2, NULL, databuffer_to_process, NULL);
}

Linux的互斥锁、条件锁的用法相关推荐

  1. iOS笔记(一)GCD多线程:信号量和条件锁

    2019独角兽企业重金招聘Python工程师标准>>> 1.信号量 dispatch_semaphore_t 在NSOperation中,可以直接设置最大并发数来控制并发数量,在GC ...

  2. Linux线程-互斥锁pthread_mutex_t

    Linux线程-互斥锁pthread_mutex_t 在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init, ...

  3. Linux多线程(线程互斥与线程锁)

    文章目录 一.基本概念 二.互斥与同步 三.线程安全问题的底层原因 (1)抢票逻辑 (2)底层原理 四.线程锁 1.锁的使用 (1)初始化和销毁 (2)加锁和解锁 2.抢票逻辑 3.锁的原理 五.死锁 ...

  4. linux内核互斥锁

    Linux内核互斥锁–mutex 一.定义: /linux/include/linux/mutex.h 二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实 ...

  5. 你了解多线程自旋锁、互斥锁、递归锁等锁吗?

    首先看一下问题引出,先看一些经典的问题. 多线程的隐患 首先我们利用多线程的话肯定是好处多多,因为我们可以同时去做一些事情,大大的提高了效率.像我们下载视频的时候就可以同时下载多个视频,这样是节省了很 ...

  6. 可重入锁(递归锁) 互斥锁属性设置

    前言: 上一次刷博客的时候,看到了自旋锁,通过学习Linux内核,对自旋锁有了一定的了解.在学习的过程中看到这么一句话--自旋锁是不可递归的.自旋锁不可递归,难道有可以递归的锁?带着这个问题,我们来看 ...

  7. 探秘最新Linux内核中的自旋锁

    一.前言 目前最新内核中的自旋锁已经进化成queued spinlock,因此需要一篇新的自旋锁文档来跟上时代.此外,本文将不再描述基本的API和应用场景,主要的篇幅将集中在具体的自旋锁实现上.顺便说 ...

  8. LINUX内核之普通自旋锁

    LINUX内核之普通自旋锁 @CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author:WenHui,WuHan Universi ...

  9. Linux内核同步机制--自旋锁【转】

    本文转载自:http://www.cppblog.com/aaxron/archive/2013/04/12/199386.html 自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已 ...

  10. POSIX互斥锁自旋锁

    基础组件-POSIX互斥锁自旋锁 基础组件 基础组件-POSIX互斥锁自旋锁 前言 一.互斥锁 二.自旋锁 特点: 场景: 使用原则 自旋锁属性 三.两把锁的区别 1. 调度策略 2.使用场景 四.常 ...

最新文章

  1. 学python要考什么证-学python需要考证吗?
  2. 一个easyui的案例(SSH)
  3. mysql 授权用户_MySQL创建用户与授权
  4. 支付宝小程序组件库开发之自定义switch组件
  5. [WP8] ListBox的Item宽度自动填满
  6. Jmeter系列之常用组件(一)
  7. 怎么提升企业数据分析能力
  8. GooFlow插件IE8及以下报无法设置未定义或 null 引用的属性“value”错误
  9. C/C++,pascal函数调用约定
  10. 二分类模型AUC评价法
  11. 使用PHP制作 简易员工管理系统之二(管理员登陆界面以及验证)
  12. 步步惊心插曲 - 歌词
  13. 猿创征文 |汇编语言基础知识
  14. Python中的字符串
  15. MySQL教程——MySQL注释:单行注释和多行注释
  16. (管用)电脑突然没声了
  17. 计算机视觉中的MAP的理解(mean average precision)
  18. 程序员的算法趣题Q68: 异性相邻的座位安排(1)
  19. 区块链基础(简单学习)
  20. 此错误(HTTP 500 内部服务器错误)意味着您正在访问的网站出现了服务器问题,此问题阻止了该网页的显示

热门文章

  1. HD2做Windows Phone 7开发机小记(上)
  2. 函数指针作为函数參数,实现冒泡排序的升序排序和降序排序
  3. zTree——删除所有节点
  4. 利用python并发模块进行网站的状态检测
  5. 让程序最小化到任务栏的时候隐藏
  6. Openlayers layer 切换底图
  7. JavaWeb开发模式
  8. php webservice 上传大文件,JS和WebService大文件上传代码分享
  9. PHPKafka 1.0 发布,支持全部 50 个 API
  10. 撤销工作表保护原密码_批量解除工作表保护,和批量执行保护一样简单