博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
临界区(Critical section)与互斥体(Mutex)的区别
阅读量:4558 次
发布时间:2019-06-08

本文共 890 字,大约阅读时间需要 2 分钟。

1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。

2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。
3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用。

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

5、互斥量:为协调共同对一个共享资源的单独访问而设计的。

临界区(Critical Section)
  保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。
  临界区包含两个操作原语:
  EnterCriticalSection() 进入临界区
  LeaveCriticalSection() 离开临界区
  EnterCriticalSection()语句执行后代码将进入临界区以后无论发生什么,必须确保与之匹配的LeaveCriticalSection()都能够被执行到。否则临界区保护的共享资源将永远不会被释放。虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

互斥量(Mutex)

  互斥量跟临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

 

转载于:https://www.cnblogs.com/yongqiangyue/archive/2012/08/28/3984782.html

你可能感兴趣的文章
GROUP BY 与聚合函数 使用注意点
查看>>
oracle表名、字段名大小写问题。
查看>>
SVN学习--VisualSVN Server和TortoiseSVN的配置和使用
查看>>
CSS-继承和层叠
查看>>
「雕爷学编程」Arduino动手做(13)——触摸开关模块
查看>>
【u119】中位数
查看>>
【42.86%】【codeforces 742D】Arpa's weak amphitheater and Mehrdad's valuable Hoses
查看>>
Python Pandas分组聚合
查看>>
Thymeleaf 学习笔记
查看>>
MAC IP等相关
查看>>
Unable to instantiate prefab. Prefab may be broken.(Unity2018.2.2报错)
查看>>
Java中的TreeMap、Comparable、Comparator
查看>>
无刷新页面分页
查看>>
Mybatis(二)|搭建mybatis环境之注解版-简单搭配
查看>>
4.npm模块安装和使用(axios异步请求,lodash工具库)
查看>>
java的类加载机制816
查看>>
毕业生的未来
查看>>
sqlserver行转列
查看>>
PHP统计数组中所有的值出现的次数
查看>>
用canvas绘制花朵
查看>>