什么是锁
- 锁是一种特殊的数据结构+调度器,这个数据结构的维护通常是由操作系统维护的,当然如果语言自身也实现了线程管理的话,一般也会自己实现锁结构
-
本质上锁是如下的一个数据结构
struct waitList{
*ExecuteNode root;
*ExecuteNode next;
}
每当一个进程/线程开始执行的时候,cpu会读取要操作的内存结构,其head中有一个字段是CPU保证当前过程不能发生软中断(基于语言虚拟机有相似的过程),当CPU发现这个字段置为1/true时候,CPU应要忽略其他请求,直到把该位置恢复为false,然后随机唤醒一个进程/线程(ExecuteNode)
基于以上事实在调度过程中,就能发现和我们在Java中使用锁的表现一致,但CPU不能保证其他进程/线程不能修改该标志位(系统或者语言调度器保证)