临界区(critical section 每个线程中访问 临界资源 的那段代码)和互斥锁(mutex)的区别(进程间互斥量共享内存虚拟地址)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了临界区(critical section 每个线程中访问 临界资源 的那段代码)和互斥锁(mutex)的区别(进程间互斥量共享内存虚拟地址)相关的知识,希望对你有一定的参考价值。
今天看这篇文章,感觉临界区和互斥锁效果差不多,都是锁住一段代码,只让一个线程访问,不知道有什么区别。。。
C语言多线程基础-02-临界区,互斥量
区别:
1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。
2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。
3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用(Linux下只能用锁)
参考文章:临界区和互斥锁的区别
关于进程间的互斥体(互斥锁),我不太明白,可以参考这篇文章:
它是用共享内存的方式实现的,在调用pthread_mutex_init()
函数时,第二个参数需要传入一个属性对象(状态对象)的地址
而锁需要定义在共享内存上,关于共享内存的创建,可以参考这篇文章:
Linux共享内存 封装
另外,可见补充知识:
LINUX进程变量隔离 虚拟地址
以上是关于临界区(critical section 每个线程中访问 临界资源 的那段代码)和互斥锁(mutex)的区别(进程间互斥量共享内存虚拟地址)的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 -- 共享代来的问题(操作统一资源) & 临界区 Critical Section & 竞态条件 Race Condition
windows下使用Critical Section和Mutex实现线程同步实例