互斥锁和条件变量
来源:互联网 发布:淘宝商城童装男童装 编辑:程序博客网 时间:2024/05/16 08:15
互斥琐
定义:指代相互排斥,最基本的同步形式。用于保护临界区,以保证任何时刻只有一个线程或一个进程在执行其中的代码。
上锁:pthread_mutex_lock()
临界区
解锁:pthread_mutex_unlock();
条件变量
定义:用于等待信号,同步的另一种手段。每一个条件变量总有一个互斥琐与之关联。
等待函数:pthread_cond_wait();
信号发送函数:pthread_cond_signal();
生产者和消费者的问题:生产者向buf添加数据,添加到 m 个,消费者读数据,读到 i 个;
1.如果只用互斥琐解决,消费者读的每一个i 数据,都必须先上锁 m ,然后查询 i < m ? 然后解锁,如果不小于,则接着上锁——查询——解锁,需要轮询,这将非常消耗CPU。
2.互斥琐+条件变量完美解决这个问题:互斥琐用于上锁,条件变量用于等待,生产者流程 上锁——生产数据——解锁,上锁——改变条件,发信号——解锁。(条件用来通知消费者数据准备好,为避免上锁冲突,需要先改变条件再发信号)。消费者流程 上锁——等待条件,改变条件——解锁。
附加:
读写锁:
同步一些线程共享的一个或多个数据的访问或更新。
属性:只要没有线程持有某个给定的读写锁用于写,那么任意数目的线程可以持有该读写锁用于读。
仅当没有线程持有某个给定的读写锁用于读或写时,才能分配该读写锁用于写。
相关函数:pthread_rwlock_rdlock();//获取一个读出锁;
pthread_rwlock_wrlock();//获取一个写入锁;
pthread_rwlock_unlock();//释放一个读出锁或写入锁;
记录上锁:读写锁的一种扩展类型,可用于有亲缘关系或无亲缘关系的进程之间共享某个文件的读和写。被锁住的文件通过其描述符访问,执行上锁操作的函数是fcntl.这种锁通常在内核中维护,属主是由属主的进程ID标识的。
- 互斥锁和条件变量
- 互斥锁和条件变量
- 条件变量和互斥锁
- 互斥锁和条件变量
- 互斥锁和条件变量
- 互斥锁和条件变量
- 互斥锁和条件变量
- 互斥锁和条件变量
- 互斥锁和条件变量
- 互斥锁和条件变量
- 条件变量和互斥锁
- 互斥锁和条件变量
- 互斥锁和条件变量
- linux互斥锁和条件变量
- Linux互斥锁和条件变量
- Linux互斥锁、条件变量和信号量
- Linux--Linux互斥锁、条件变量和信号量
- Linux--Linux互斥锁、条件变量和信号量
- idea2016中tomcat配置及运行
- View
- 结果是:空格空格3.0e+001,我不明白这加001是怎么回事啊?还有这个printf("%e\n",30.14);结果是3.014000e+001这是怎么算出来的?谁帮我讲下方法?
- ViewController页面跳转的方法
- 数组是如何实现扩容的
- 互斥锁和条件变量
- 不同的系统针对不同的换行符号识别
- 让iOS开发变得更有效率-分类、工具类
- TCP&IP 实现
- 整理面试题
- list 初始化大小
- typedef int a[10];怎么解释?
- yarn任务调度
- demo - loading开源控件