什么是“雷群”问题?即使在使用自旋锁之后,竞争条件怎么会发生?

什么是“雷群”问题?即使在使用自旋锁之后,竞争条件怎么会发生?

这里:

等待表等待释放页面的进程的等待队列的哈希表。这对于 wait_on_page() 和unlock_page() 很重要。虽然所有进程都可以在一个队列上等待,但这会导致所有等待进程在唤醒时争夺仍处于锁定状态的页面。像这样争夺共享资源的一大群进程有时被称为惊群。等待表将在第 2.2.3 节中进一步讨论;

什么是“雷群”问题,并且页面中提到使用了自旋锁,即使使用自旋锁,如何也会发生竞争条件?竞争进程的数量真的很重要吗?我认为无论有多少个进程在竞争,只有一个进程会抢到自旋锁,不会出现竞争条件。

答案1

没有race condition,自旋锁确保了这一点。

就是thundering herd problem当发生某些事情时,通常是释放锁或 I/O 输入事件完成,许多一直在等待的进程将恢复。将选择其中之一,其余所有通常将恢复等待锁定或 I/O 事件。

想想新闻发布会。当简报人完成一个回答后,所有记者都开始试图吸引简报人的注意。通报人选择一个,所有记者都坐下来,提出一个问题并回答,然后所有记者再次尝试吸引注意力。这对于十名记者来说效果很好,但是对于一万名记者来说,所有记者试图吸引注意力都会浪费很多精力,而通过让记者排队并每个人轮流提问可以提高效率。

所以thundering herd是关于效率而不是正确性。

相关内容