Linux的互斥锁、条件锁的用法
举例来说,这边从某处读取数据到缓冲区,那边将缓冲区数据进行处理。
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的互斥锁、条件锁的用法相关推荐
- iOS笔记(一)GCD多线程:信号量和条件锁
2019独角兽企业重金招聘Python工程师标准>>> 1.信号量 dispatch_semaphore_t 在NSOperation中,可以直接设置最大并发数来控制并发数量,在GC ...
- Linux线程-互斥锁pthread_mutex_t
Linux线程-互斥锁pthread_mutex_t 在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init, ...
- Linux多线程(线程互斥与线程锁)
文章目录 一.基本概念 二.互斥与同步 三.线程安全问题的底层原因 (1)抢票逻辑 (2)底层原理 四.线程锁 1.锁的使用 (1)初始化和销毁 (2)加锁和解锁 2.抢票逻辑 3.锁的原理 五.死锁 ...
- linux内核互斥锁
Linux内核互斥锁–mutex 一.定义: /linux/include/linux/mutex.h 二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实 ...
- 你了解多线程自旋锁、互斥锁、递归锁等锁吗?
首先看一下问题引出,先看一些经典的问题. 多线程的隐患 首先我们利用多线程的话肯定是好处多多,因为我们可以同时去做一些事情,大大的提高了效率.像我们下载视频的时候就可以同时下载多个视频,这样是节省了很 ...
- 可重入锁(递归锁) 互斥锁属性设置
前言: 上一次刷博客的时候,看到了自旋锁,通过学习Linux内核,对自旋锁有了一定的了解.在学习的过程中看到这么一句话--自旋锁是不可递归的.自旋锁不可递归,难道有可以递归的锁?带着这个问题,我们来看 ...
- 探秘最新Linux内核中的自旋锁
一.前言 目前最新内核中的自旋锁已经进化成queued spinlock,因此需要一篇新的自旋锁文档来跟上时代.此外,本文将不再描述基本的API和应用场景,主要的篇幅将集中在具体的自旋锁实现上.顺便说 ...
- LINUX内核之普通自旋锁
LINUX内核之普通自旋锁 @CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author:WenHui,WuHan Universi ...
- Linux内核同步机制--自旋锁【转】
本文转载自:http://www.cppblog.com/aaxron/archive/2013/04/12/199386.html 自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已 ...
- POSIX互斥锁自旋锁
基础组件-POSIX互斥锁自旋锁 基础组件 基础组件-POSIX互斥锁自旋锁 前言 一.互斥锁 二.自旋锁 特点: 场景: 使用原则 自旋锁属性 三.两把锁的区别 1. 调度策略 2.使用场景 四.常 ...
最新文章
- 学python要考什么证-学python需要考证吗?
- 一个easyui的案例(SSH)
- mysql 授权用户_MySQL创建用户与授权
- 支付宝小程序组件库开发之自定义switch组件
- [WP8] ListBox的Item宽度自动填满
- Jmeter系列之常用组件(一)
- 怎么提升企业数据分析能力
- GooFlow插件IE8及以下报无法设置未定义或 null 引用的属性“value”错误
- C/C++,pascal函数调用约定
- 二分类模型AUC评价法
- 使用PHP制作 简易员工管理系统之二(管理员登陆界面以及验证)
- 步步惊心插曲 - 歌词
- 猿创征文 |汇编语言基础知识
- Python中的字符串
- MySQL教程——MySQL注释:单行注释和多行注释
- (管用)电脑突然没声了
- 计算机视觉中的MAP的理解(mean average precision)
- 程序员的算法趣题Q68: 异性相邻的座位安排(1)
- 区块链基础(简单学习)
- 此错误(HTTP 500 内部服务器错误)意味着您正在访问的网站出现了服务器问题,此问题阻止了该网页的显示