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 系统编程手册(上) -- 线程:线程同步相关推荐

  1. linux/unix系统编程手册11-15

    title: linux/unix编程手册-11_15 date: 2018-05-27 11:53:07 categories: programming tags: tips linux/unix编 ...

  2. Linux/UNIX系统编程手册gg

    Linux系统: "所见皆文件" 一个比较好的博客 一.Linux基础操作 Linux系统目录: bin:存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件: ...

  3. Linux/Unix系统编程手册 第三章:系统编程概念

    本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...

  4. Linux/Unix系统编程 五:进程

    进程是一个可执行程序的实例. 一.linux系统进程管理 1.进程管理的作用 判断机器健康状态 查看系统中所有进程 杀手进程 2.查看系统进程 1.ps -aux BSD操作系统格式: TTY说明: ...

  5. Linux系统编程(九)线程同步

    Linux系统编程(九)线程同步 一.什么是线程同步? 二.互斥量 三.条件变量 pthread_cond_wait函数 pthread_cond_signal函数 生产者和消费者模型 一.什么是线程 ...

  6. Linux系统编程(八)线程

    Linux系统编程(八)线程 一.什么是线程? 二.Linux内核线程实现原理 线程共享资源 线程非共享资源 线程优缺点 线程控制原语 一.什么是线程? LWP:light weight proces ...

  7. Linux系统编程手册-源码的使用

    Linux系统编程手册-源码的使用 转自:http://www.cnblogs.com/pluse/p/6296992.html 第三章后续部分重点介绍了后面章节所要使用的头文件及其实现,主要如下: ...

  8. Linux系统编程之进程与线程控制原语对比

    Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...

  9. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  10. ①Linux简明系统编程(嵌入式公众号的课)---总课时12h

    10.09 注意:这个是Linux高级编程的简明教程,是Linux应用程序的开发,而不是底层程序的开发. 内容是关于操作系统和网络编程的吗? Linux简明系统编程 〇.课程思维导图 〇.会用到的头文 ...

最新文章

  1. 【工具】更新国内使用谷歌日历解决方案——飞书日历,谷歌输入法下载
  2. python编辑器_初学Python这几款编辑器,推荐你安装
  3. checkbox复选框样式
  4. java事务_JAVA事务
  5. c语言语法分析源程序,深入浅出编译原理-5-一个简单语法分析器的C语言实现
  6. 《四世同堂》金句摘抄(四)
  7. Apriori关联规则算法实现及其原理(基础篇)
  8. DataNode之文件系统数据集FsVolumeList
  9. linux查看java堆栈信息_Java运行状态分析2:获取线程堆栈信息
  10. Protel99se信号完整性的最新应用
  11. 小超市的大梦想,京东的梦醒时分
  12. 语音文件aac-raw-wav格式转换方法
  13. 数据分析入门必备基础知识
  14. 使用EasyBCD修改设置引导启动项
  15. Ubuntu 搜狗输入法 中文 无法切换 英文
  16. 关于使用HandlerThread获取数据,并实现sqlite分页。
  17. 2011年8月编程语言排行榜
  18. 小米生态链之殇?“去小米化”的企业终将会积极拥抱小米
  19. bootstrap 大坑,大坑
  20. 剑指offer系列——剑指 Offer 04. 二维数组中的查找(C语言)

热门文章

  1. HTTPS和SSL握手过程(转载)
  2. 监控服务器ssh登录,并发送报警邮件
  3. [moka同学笔记]WINDOWS中cmd的切换目录cd命令失效
  4. Android的系统架构
  5. (转:htk中命令行参数的读取)
  6. ISAPI Rewrite 2 规则中文版
  7. 编程初学者必须知道的十件事
  8. 45本数据分析、Python的书籍,包邮送到家
  9. js 数组转带空格字符串
  10. vijos1846 [NOIP2013] 华容道【最短路】