MVar 公平性保证?

MVar fairness guarantees?

我正在使用 MVar 构建一个线程安全的共享状态,并且由于要求,我需要一些公平保证(如果两个线程一个接一个地询问 MVar 下的状态,那么尽快当状态可用时,线程将按照他们要求的顺序接受它。

我在 MVar documentation 中没有找到任何注释。

因此,在公平保证的情况下,是否需要构建某种 ReentrantLock(true) 公平锁的包装器?

我不知道确切的保证是什么,但在猫效应中,调度程序经常提到公平性。这意味着您可能无法获得您在第一次获取 MVar 时提到的确切顺序,但没有人会挨饿,因为在轮到您之后您会放弃您的纤维并且必须在获取之前重新安排再次MVar

换句话说,如果您需要精确排序或精确循环,您将不得不自己实现它,但如果您的要求确实类似于“每个符合条件的光纤获得大致相同的运行时间而无需挨饿”然后你几乎可以免费得到它。