C++锁的实现机制

C++

1个回答

写回答

snowingbaby

2025-12-29 13:25

+ 关注

KTV
KTV

硬件方面有专门的东西用来实现锁,但这个东西既不是寄存器,也和线程没有对应关系。在CPU看来,哪有什么线程、进程啊,统统都是指令流。这就好比你早上起来后,吃饭、上班、偷偷懒、工作、吃午饭等一系列行为一样。进程或者线程,就像是老板给你安排一个任务,比如拜访客户、陪客户去KTV玩乐。但对于CPU而言,依旧是指令流:出发、找到客户、前往KTV、挑选公主之类的。CPU中的锁是基于数据的。每个数据都有一个地址(内存地址),在读写数据的时候,会用这个地址在L1高速缓存(Cache)里搜索,如果找到了,就在L1里进行读写操作。要是找不到,就再去L2、L3里搜索,如果这些地方都找不到,那就到内存中读取,最后数据一定要读到L1里,然后在L1中进行读写。你可以理解为CPU只能针对L1进行数据的读写。锁这个东西就在L1高速缓存里。关于Cache Line之类的我就不详细说了,简单来讲,你可以认为数据在L1里的时候,有一个标志位。当你把这个标志位设为1时,其他人访问这条数据就得等待,直到你把这个标志位设为0。这个标志位就被叫做Cache Lock标志。这个过程是这样的:你把地址为Addr1的数据读到自己的L1里,并且设置了Cache Lock,这时另一个CPU也要对地址为Addr1的数据进行读写,过程如下:它的CPU先发出询问,谁有Addr1的数据,我要读写了。你的CPU回应,我有,而且我加了Cache Lock了,你先等着吧。这就是计算机所有锁最基本的原理。你可以基于这种基于内存地址数据的锁,来实现各种各样、复杂至极的锁机制。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号