操作系统 锁的实现:两个完全一样的人,在同一时间去面试,面试官也相同,它们的面试结果相同吗?

操作系统互斥锁的实现往往借助于硬件原语。就比如TestAndSet(),在单处理器上在同一时间内不会有两个同时调用,但是在多处理器上可能会有两个或的多个线程同时调用,但是只有一个会获得锁。就好像是两个完全一样的人,在同一时间去面试,面试官相同,但是只录取一个人,也就是说两个人的录取结果一定是不同的。这就很让人费解了,到底为什么一个录取了(获得锁),而另一个没有录取(没有获得锁)呢?还是说这个硬件原语即使是在多处理器上,同一时间也只有一个可以被调用?

如果锁只有一把,那么这里并不表示第二个人没有锁,只是先后顺序,第二个人等第一个人用完了再获取.

在多处理器上,TestAndSet() 硬件原语的实现会使用一些特殊的指令,例如 Compare-and-Swap (CAS) 指令。这些指令可以在多个处理器之间进行原子操作,确保只有一个线程可以成功地获取锁。当多个线程同时调用 TestAndSet() 时,只有一个线程可以成功地将锁的值从未锁定状态改为锁定状态,而其他线程则会失败并等待锁的释放。因此,即使在多处理器上,同一时间也只有一个线程可以成功地获取锁。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1057585
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里和快排一样,老师依旧是直接打了100个星星,太重要啦。归并排序和快排很容易混淆,因为归并排序也用到了分治算法的思想。思路是,现在对一个数组进行排序,我们把数组分为两份,如果左边数组是有序的数组了,右边也是一个有序的数组了,那么我们把两个数组合并起来,整个数组就有序了,如果这两个数组不是有序呢?那我们继续分,分分分,直到小区间只剩下一个元素的时候,那么整个小区间就是有序的了。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想