您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

lock()是否保证按请求的顺序获取?

lock()是否保证按请求的顺序获取?

IIRC, 很有可能 按照该顺序进行,但不能保证。我认为,至少在理论上有一个线程会被虚假唤醒的情况,请注意该线程仍然没有锁,然后转到队列的后面。可能仅用于Wait/Notify,但我有一个偷偷的怀疑,它也用于锁定。

我 不会依赖它-如果您需要按顺序进行操作,构建一个Queue<T>或类似的东西。

编辑:我刚刚在Windows上的 Joe Duffy的并发编程中找到了这个,它基本上同意:

由于监视器在内部使用内核对象,因此它们表现出与OS同步机制同样表现出的大致FIFO行为(在上一章中进行了介绍)。监视器是不公平的,因此,如果在唤醒的等待线程尝试获取锁之前另一个线程尝试获取锁,则允许偷偷摸摸的线程获取锁。

“大致FIFO”位是我以前想到的,“鬼thread线程”位进一步证明了您不应该对FIFO顺序进行假设。

其他 2022/1/1 18:16:48 有452人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶