C语言 锁之前/之后的代码总是顺序执行?


CodeBlockA;
Lock;
CodeBlockB;
Unlock;
CodeBlockC

代码块可能包含很多代码,只要把它作为一个单元。

codeblockka CodeBlockB CodeBlockC总是在串行执行?锁是如何做到这一点的?

现在,我不知道其他系统,但在linux上是这样的:

pthreads

在NPTL中,线程同步原语(互斥锁,线程连接等)是使用Linux的futex(2)系统调用实现的。

futex

当执行请求阻塞线程的futex操作时,只有当futex字的值为that时内核才会阻塞类的参数之一提供调用线程Futex()调用)作为Futex字的期望值。的加载futex单词的值,对该值进行比较与期望值一致,实际阻塞就会发生相对于并发,原子和将完全有序其他线程在同一futex字上执行的操作。因此,futex字被用来连接同步用户空间用阻塞由内核实现。类似于原子比较与交换操作通过futex阻塞可能会改变共享内存原子比较块操作。

C - mtx_lock

先前对同一个互斥锁的mtx_unlock调用与此操作同步,并且对任何给定互斥锁的所有锁/解锁操作形成一个单一的总顺序(类似于原子的修改顺序)

C标准n2596

7.26.4互斥函数

为了确定是否存在数据竞争,锁和锁操作的行为如下原子操作。对特定互斥锁的所有锁和解锁操作都发生在某个特定的总订单。

注意这个总顺序可以看作是互斥锁的修改顺序。

相关内容

  • 没有找到相关文章

最新更新