栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、互斥和同步

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

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

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

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

二、线程同步的4种方式 2.1 临界区(CriticalSection)

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

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

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

2.2 互斥量(Mutex)

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

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

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

2.3 事件(Event)

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

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

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

2.4 信号量(Semphore)

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号