![什么是“雷群”问题?即使在使用自旋锁之后,竞争条件怎么会发生?](https://linux22.com/image/179250/%E4%BB%80%E4%B9%88%E6%98%AF%E2%80%9C%E9%9B%B7%E7%BE%A4%E2%80%9D%E9%97%AE%E9%A2%98%EF%BC%9F%E5%8D%B3%E4%BD%BF%E5%9C%A8%E4%BD%BF%E7%94%A8%E8%87%AA%E6%97%8B%E9%94%81%E4%B9%8B%E5%90%8E%EF%BC%8C%E7%AB%9E%E4%BA%89%E6%9D%A1%E4%BB%B6%E6%80%8E%E4%B9%88%E4%BC%9A%E5%8F%91%E7%94%9F%EF%BC%9F.png)
从这里:
等待表等待释放页面的进程的等待队列的哈希表。这对于 wait_on_page() 和unlock_page() 很重要。虽然所有进程都可以在一个队列上等待,但这会导致所有等待进程在唤醒时争夺仍处于锁定状态的页面。像这样争夺共享资源的一大群进程有时被称为惊群。等待表将在第 2.2.3 节中进一步讨论;
什么是“雷群”问题,并且页面中提到使用了自旋锁,即使使用自旋锁,如何也会发生竞争条件?竞争进程的数量真的很重要吗?我认为无论有多少个进程在竞争,只有一个进程会抢到自旋锁,不会出现竞争条件。
答案1
没有race condition
,自旋锁确保了这一点。
就是thundering herd problem
当发生某些事情时,通常是释放锁或 I/O 输入事件完成,许多一直在等待的进程将恢复。将选择其中之一,其余所有通常将恢复等待锁定或 I/O 事件。
想想新闻发布会。当简报人完成一个回答后,所有记者都开始试图吸引简报人的注意。通报人选择一个,所有记者都坐下来,提出一个问题并回答,然后所有记者再次尝试吸引注意力。这对于十名记者来说效果很好,但是对于一万名记者来说,所有记者试图吸引注意力都会浪费很多精力,而通过让记者排队并每个人轮流提问可以提高效率。
所以thundering herd
是关于效率而不是正确性。