ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

操作系统基础(四)线程同步方式

2022-02-05 10:02:37  阅读:198  来源: 互联网

标签:同步 操作系统 对象 互斥 临界 线程 事件 资源


一、互斥和同步

  互斥,对于共享的系统资源,在各个线程访问时的排它性。任何时刻最多只允许一个线程去使用,其他要使用的线程必须等待,直到占用资源者释放该资源。

  同步,协同步调,按预定的先后次序进行。同步也满足互斥的条件,并且多了执行顺序的要求。

  临界区(Critical Section)、互斥对象(Mutex)主要用于互斥控制;都具有拥有权的控制方法,只有拥有该对象的线程才能执行任务,所以拥有,执行完任务后一定要释放该对象。

  信号量(Semaphore)、事件对象(Event):事件对象是以通知的方式进行控制,主要用于同步控制

二、线程同步的4种方式

2.1 临界区(CriticalSection)

  临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。

  它并不是核心对象,不属于操作系统维护的,只能同一进程中线程使用,不能跨进程使用。

  临界区一般使用锁的方式来实现,常见的互斥锁和读写锁:提供对临界资源的保护,当多线程试图访问临界资源时,都必须通过获取锁的方式来访问临界资源。(临界资源:是被多线程共享的资源)当读写线程获取锁的频率差别不大时,一般采用互斥锁,如果读线程访问临界资源的频率大于写线程,这个时候采用读写锁较为合适。

2.2 互斥量(Mutex)

  互斥量多用于多进程之间的线程互斥,用来确保一个线程独占一个资源的访问。而且能正确处理资源遗弃的问题。

“遗弃”问题就是——占有某种资源的进程意外终止后,其它等待该资源的进程能否感知。而事件与信号量都无法处理遗弃问题。

  互斥对象和临界区对象非常相似,只是互斥对象允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,但是更节省资源,更有效率。

2.3 事件(Event)

  事件机制,则允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。

  事件是内核对象,事件分为手动置位事件和自动置位事件。事件Event内部它包含一个使用计数(所有内核对象都有),一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。

  事件可以解决线程间同步问题,因此也能解决互斥问题。

2.4 信号量(Semphore)

  当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象。

  信号量提供对临界资源的安全分配。如果存在多份临界资源,在多个线程争抢临界资源的情况下,向线程提供安全分配临界资源的方法。

  如果临界资源的数量为1,将退化为锁。

标签:同步,操作系统,对象,互斥,临界,线程,事件,资源
来源: https://blog.csdn.net/JinYJ2014/article/details/122788236

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有