(1)线程同步

1)线程同步:指一个线程发出某一个功能运行时,在运行还没有结束的时候,该调用不返回。同时其它线程为保证数据的一致性,不能调用该功能。

2)多个控制流共同操作一个共享资源的时候,都需要同步

3)数据混乱的原因:1》资源共享  2》调度随机   3》线程间缺乏必要的同步机制。

前两点无法避免,只能从第三点开始优化。

(2)互斥量mutex

1)linux中提供一把互斥锁mutex(互斥量),每个线程都是提前对资源操作前都尝试先加锁,成功加锁才能操作,操作结束后解锁。

2)同一个时刻,只能有一个线程持有该锁。

3)当线程A多某个全局变量加锁访问时,B在访问时尝试加锁,失败后,B阻塞。C线程不加锁访问全局变量,可以访问,但是数据混乱,因此互斥锁又被成为“建议锁”(协同锁),没有强制限定

(3)互斥量及相关函数:

pthread_mutex_t类型,一个结构体,使用时可看做整数。函数成功返回0,失败返回错误号。

1)pthread_mutex_intit:初始化一个互斥锁(互斥量)    -->初值可看作1

int pthread_mutex_init(pthread_mutex_t*restrict mutex,const pthread_mutexattr_t*restrict attr);

参数1;传出参数,待初始化的互斥量。

参数2:看成互斥量属性,出入参数,通常传NULL,表示默认属性(线程间共享)

静态初始化: 使用宏初始化  pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;

动态初始化:使用函数初始化。

2)pthread_mutex_destory:销毁一个互斥锁

int  pthread_nutex_destory(pthread_mutex_t *mutex);

3)pthread_mutex_lock:加锁

尝试加锁,加锁不成功,则阻塞。

int  pthread_nutex_lock(pthread_mutex_t *mutex);

4)pthread_mutex_unlock:解锁

唤醒阻塞所有线程。

int  pthread_nutex_unlock(pthread_mutex_t *mutex);

5)pthread_mutex_trylock:尝试加锁

加锁失败后返回错误号,不阻塞。

int  pthread_nutex_trylock(pthread_mutex_t *mutex);

(4)加锁解锁测试:不同线程实现不同的打印任务

结论:在访问共享资源时加锁,访问结束后解锁,锁的“粒度”越小越好

(5)死锁

1)同一个线程试图多同一个互斥量加锁两次。

2)线程1拥有A锁请求B锁;线程2拥有B锁请求A锁。

linux操作系统之线程同步及互斥量相关推荐

  1. 信号灯文件锁linux线程,linux——线程同步(互斥量、条件变量、信号灯、文件锁)...

    一.说明 linux的线程同步涉及: 1.互斥量 2.条件变量 3.信号灯 4.文件读写锁 信号灯很多时候被称为信号量,但个人仍觉得叫做信号灯比较好,因为可以与"SYSTEM V IPC的信 ...

  2. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发

    多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...

  3. 线程同步之互斥量(互斥锁)

    1 同步的概念 所谓同步, 即同时起步,协调一致.不同的对象, 对"同步" 的理解方式略有不同. 如,设备同步,是指在两个设备之间规定一个共同的时间参考: 数据库同步, 是指让两个 ...

  4. 1线程同步:互斥量,死锁

     1线程为什么要同步 A:共享资源,多个线程都可对共享资源操作. B:线程操作共享资源的先后顺序不确定. C:处理器对存储器的操作一般不是原子操作. 2互斥量 mutex操作原语 pthread_ ...

  5. 线程同步之互斥量加锁解锁 死锁

    与互斥锁相关API       互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁.对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻 ...

  6. RTT的线程同步篇——互斥量

    野火RTT第20章互斥量 2018年12月29日 10:47 互斥量不能在中断服务程序中使用. 互斥量是特殊的二值信号量,其"特殊"在哪呢?互斥量不同于二值信号量的地方在于:互斥量 ...

  7. Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)

    同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两 个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数据库内容 ...

  8. linux线程同步(1)-互斥量

    一.概述                                                   互斥量是线程同步的一种机制,用来保护多线程的共享资源.同一时刻,只允许一个线程对临界区进行 ...

  9. 线程同步之——互斥量及死锁问题

    互斥量:多个线程同时访问共享数据时可能会冲突,这跟信号的可重性是同样的问题.如 果两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 1. 从内存读变量值到寄存器 2. 寄存器的值加 ...

最新文章

  1. ASP.NET之对称算法加密
  2. websocket java 测试_Java后端WebSocket的Tomcat实现
  3. Centos7 单台服务器搭建Elasticsearch6.0.1集群
  4. 【Linux系统编程】Linux线程浅析
  5. JDK 动态代理和MyBatis 用到的JDK 动态代理有什么区别?
  6. Processing 字体变形
  7. 局部页面切换url为什么不变_python爬虫 - 翻页url不变网页的爬虫探究
  8. python实例编程_python 编程实例 5
  9. java 命令行读取_Java:从控制台(console,命令行)读取字符 | 学步园
  10. python 姓名用*替换_学会用python截取你的姓名
  11. 如何用阿里云服务器建立一个wordpress网站
  12. Python 多进程multiprocessing
  13. ddrelease64 黑苹果_有老哥会看黑苹果哆嗦模式问题出在哪里的吗?
  14. 学习(一)C#利用窗体打开Excel文件进行正常访问和写入
  15. 软件工程实践2017——软件产品案例分析
  16. 无栈非递归中序遍历非线索化二叉树
  17. Windows畸形文件夹
  18. 大数据HBase在阿里搜索中的应用实践
  19. R语言——read.table函数
  20. wikioi-天梯-进入省队-并查集-1073:家族

热门文章

  1. 读书印记 - 《沟通的艺术:一本手把手教你社交沟通的书》
  2. 搭建springboot环境
  3. (转)rvm安装与常用命令
  4. Java-- 异常与记录日志
  5. 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
  6. 介绍针对企业级Flex开发的开源项目FlexibleShare
  7. 水晶报表的统计功能-Crystal Report Sub total Per Page
  8. linux用户操作的日志,linux 用户操作记录并录入日志
  9. python 东哥 with open_python 连接redis cluster
  10. python中的文件父路径怎么表达_python中的文件父路径怎么表达_如何在Python中访问父目录...