30.Linux/Unix 系统编程手册(上) -- 线程:线程同步
1.互斥量互斥量可以帮助线程同步对共享资源的使用。确保同时只有一个线程可以访问某项共享资源,一旦线程锁定互斥量,随即称为该互斥量的所有者。只有所有者才能给互斥量解锁。pthread_mutex_lock();pthread_mutex_unlock();pthread_mutex_trylock();pthread_mutex_timedlock();如果使用 fcntl()进行加锁,解锁一片文件区域,总是要发起系统调用。与之相反,互斥量的实现采用了机器语言的原子操作,只有发送锁争用时才执行系统调用。死锁:有时,一个线程需要同时访问2个或者更多不同的共享资源,而每个资源又都由不同的互斥量管理。当超过一个线程加锁同一组互斥量时,就有可能发送死锁。解决方法:以相同的顺序加锁。1.互斥量的静态初始化static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; // 互斥量静态初始化,使用情况:经由静态分配且携带默认属性。2.互斥量的动态初始化pthread_mutex_init();下面情况必须使用动态初始化:1.动态分配于堆中的互斥量2.互斥量是在栈中分配的自动变量3.初始化经由静态分配,且不使用默认属性的互斥量互斥量的销毁:pthread_mutex_destroy();静态分配的不用调用 pthread_mutex_destroy()。pthread_mutexattr_settype();2.条件变量条件变量则允许线程互相通知共享变量的状态发送了变化。条件变量允许一个线程就某个共享变量的状态变化通知其他线程,并让其他线程等待(阻塞)这一通知。条件变量允许一个线程休眠,直至接获另外一个线程的通知去执行某些操作。条件变量总是结合互斥量使用,条件变量就是共享变量的状态改变发出通知,而互斥量则是提供对共享变量访问的互斥。由静态分配的条件变量:pthread_cond_t cond = PTHREAD_COND_INITIALIER;pthread_cond_signal();pthread_cond_broadcase();pthread_cond_wait();pthread_cond_signal 与 pthread_cond_broadcase 的区别在于,二者对阻塞与 pthread_cond_wait的多个线程的处理方式不同,pthread_cond_signal 函数只保证唤醒至少一条遭遇阻塞的线程,pthread_cond_broadcase 则会唤醒所有阻塞的线程。pthread_cond_timedwait();
30.Linux/Unix 系统编程手册(上) -- 线程:线程同步相关推荐
- linux/unix系统编程手册11-15
title: linux/unix编程手册-11_15 date: 2018-05-27 11:53:07 categories: programming tags: tips linux/unix编 ...
- Linux/UNIX系统编程手册gg
Linux系统: "所见皆文件" 一个比较好的博客 一.Linux基础操作 Linux系统目录: bin:存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件: ...
- Linux/Unix系统编程手册 第三章:系统编程概念
本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...
- Linux/Unix系统编程 五:进程
进程是一个可执行程序的实例. 一.linux系统进程管理 1.进程管理的作用 判断机器健康状态 查看系统中所有进程 杀手进程 2.查看系统进程 1.ps -aux BSD操作系统格式: TTY说明: ...
- Linux系统编程(九)线程同步
Linux系统编程(九)线程同步 一.什么是线程同步? 二.互斥量 三.条件变量 pthread_cond_wait函数 pthread_cond_signal函数 生产者和消费者模型 一.什么是线程 ...
- Linux系统编程(八)线程
Linux系统编程(八)线程 一.什么是线程? 二.Linux内核线程实现原理 线程共享资源 线程非共享资源 线程优缺点 线程控制原语 一.什么是线程? LWP:light weight proces ...
- Linux系统编程手册-源码的使用
Linux系统编程手册-源码的使用 转自:http://www.cnblogs.com/pluse/p/6296992.html 第三章后续部分重点介绍了后面章节所要使用的头文件及其实现,主要如下: ...
- Linux系统编程之进程与线程控制原语对比
Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...
- 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)
文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...
- ①Linux简明系统编程(嵌入式公众号的课)---总课时12h
10.09 注意:这个是Linux高级编程的简明教程,是Linux应用程序的开发,而不是底层程序的开发. 内容是关于操作系统和网络编程的吗? Linux简明系统编程 〇.课程思维导图 〇.会用到的头文 ...
最新文章
- 【工具】更新国内使用谷歌日历解决方案——飞书日历,谷歌输入法下载
- python编辑器_初学Python这几款编辑器,推荐你安装
- checkbox复选框样式
- java事务_JAVA事务
- c语言语法分析源程序,深入浅出编译原理-5-一个简单语法分析器的C语言实现
- 《四世同堂》金句摘抄(四)
- Apriori关联规则算法实现及其原理(基础篇)
- DataNode之文件系统数据集FsVolumeList
- linux查看java堆栈信息_Java运行状态分析2:获取线程堆栈信息
- Protel99se信号完整性的最新应用
- 小超市的大梦想,京东的梦醒时分
- 语音文件aac-raw-wav格式转换方法
- 数据分析入门必备基础知识
- 使用EasyBCD修改设置引导启动项
- Ubuntu 搜狗输入法 中文 无法切换 英文
- 关于使用HandlerThread获取数据,并实现sqlite分页。
- 2011年8月编程语言排行榜
- 小米生态链之殇?“去小米化”的企业终将会积极拥抱小米
- bootstrap 大坑,大坑
- 剑指offer系列——剑指 Offer 04. 二维数组中的查找(C语言)