线程的同步方式

并发:同一个时间段有多个程序在同一个CPU上轮流执行;
并行:同一时间多个程序在不同CPU上同时执行。
并发是在时间段的表象,并行是在时刻的表象。

同步:线程之间具有依赖关系,一个线程的执行依赖于另一个线程的消息。
互斥:对于进程的某一共享资源,同一时刻只允许一个线程访问。
互斥是一种特殊的同步。

实现线程同步的方式有临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(event)。
临界区与互斥量是通过拥有权实现线程控制,只有拥有该对象的线程可以执行,用于线程的互斥控制。信号量与事件通过通知实现线程控制,收到通知的线程可以执行,用于线程的同步控制。
其中,互斥量、信号量、事件为内核对象。

临界区

对某共享资源定义临界区,当一个线程进入临界区后,其他想要访问临界区资源的线程将处于挂起状态,直到当前线程离开临界区,其他线程才可访问。

互斥量

互斥量与临界区相似,只有用户互斥量的线程可以访问资源。区别是:临界区在一个进程中实现资源控制,互斥量可以在不同进程中实现资源安全共享(需在创建互斥量时,对其命名,不同进程根据名称确保访问的是同一个互斥量)。

信号量

信号量是维护0到指定最大值之间的同步对象。计数大于0时有信号,可访问共享资源,计数等于0时无信号,不可访问,需等待直到其他线程释放信号量。

事件

事件包括触发状态和未触发状态,只有事件触发时,该事件对象才会被等到,资源得以访问。等到之后将事件置为未触发状态(或在创建事件对象时,声明等到之后自动置为未触发状态)。资源访问结束后,重新将事件置为触发状态,以便其他线程访问。

参考资料:

  1. https://blog.csdn.net/guoxiang3538/article/details/79376191.
  2. https://www.cnblogs.com/yhlboke-1992/p/9315263.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值