Skip to content

线程的同步和互斥

约 709 字大约 2 分钟

c++操作系统

2019-04-26

1. 什么是同步,什么是互斥?

  1. 同步:线程同步并不是说线程同时运行,而是让线程按照一定的顺序执行,使得最后的数据能达到同步,多线程的情况下,如果不加以控制,多个线程一起对数据进行添加或者是修改,数据会异常混论。

  2. 互斥:有一些资源,比如:打印机。一次只能被一个线程访问,不允许多个线程同时访问,这种资源叫做临界资源。因此一个线程在访问这种资源的时候,其它线程不能访问,这就叫做互斥。【临界区:访问临界资源的那一段代码就叫做临界区。线程只有先进入临界区的才能访问到临界资源。】

2. 操作系统实现同步的方式

  1. 使用互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如Java中的synchronized关键词和各种Lock都是这种机制。

  2. 使用信号量(Semphares) :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量

3. c++ 实现互斥两种方式

提示

MyThread1 MyThread2 作为两个互斥进程 争抢屏幕输出

终端控制台作为 临界资源 一次只允许一个进程进行输出,不然屏幕输出会变得混乱

1. lock unlock实现互斥

贡献者