临界区(critical section 每个线程中访问 临界资源 的那段代码)和互斥锁(mutex)的区别(进程间互斥量共享内存虚拟地址)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了临界区(critical section 每个线程中访问 临界资源 的那段代码)和互斥锁(mutex)的区别(进程间互斥量共享内存虚拟地址)相关的知识,希望对你有一定的参考价值。

今天看这篇文章,感觉临界区和互斥锁效果差不多,都是锁住一段代码,只让一个线程访问,不知道有什么区别。。。
C语言多线程基础-02-临界区,互斥量

区别:

1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。
2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。
3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用(Linux下只能用锁)
参考文章:临界区和互斥锁的区别

关于进程间的互斥体(互斥锁),我不太明白,可以参考这篇文章:

Linux进程间互斥锁 (共享内存实现)

它是用共享内存的方式实现的,在调用pthread_mutex_init()函数时,第二个参数需要传入一个属性对象(状态对象)的地址

而锁需要定义在共享内存上,关于共享内存的创建,可以参考这篇文章:
Linux共享内存 封装

另外,可见补充知识:
LINUX进程变量隔离 虚拟地址

以上是关于临界区(critical section 每个线程中访问 临界资源 的那段代码)和互斥锁(mutex)的区别(进程间互斥量共享内存虚拟地址)的主要内容,如果未能解决你的问题,请参考以下文章

mutex和CRITICAL_SECTION,互斥和临界区

JUC并发编程 -- 共享代来的问题(操作统一资源) & 临界区 Critical Section & 竞态条件 Race Condition

多线程中的临界区

windows下使用Critical Section和Mutex实现线程同步实例

spinlock,mutex,semaphore,critical section的作用与差别

线程的同步控制(Synchronization)