代码之家  ›  专栏  ›  技术社区  ›  Indeed is Trash

锁语句C#

  •  6
  • Indeed is Trash  · 技术社区  · 16 年前

    假设我有三个线程需要访问一个集合,并且在每个线程的访问周围使用一个锁块。发生以下情况…

    (1)线程1获取集合的锁
    (2)螺纹2堵塞
    (3)螺纹3堵塞

    当线程1释放锁时,谁将获得下一个锁?它是FIFO访问吗?

    谢谢

    5 回复  |  直到 16 年前
        1
  •  17
  •   Amy B    16 年前

    你不应该关心下一个锁是谁拿的。

        2
  •  5
  •   Dirk Vollmar    16 年前

    你的问题意味着你在寻找一种先进先出的行为?然后,您可能希望通过jakub sloop尝试此代码:

    Monitor/lock which remember order in C# to simulate FIFO

    正如其他答案中已经提到的,没有保证等待线程将收到锁的顺序。

        3
  •  4
  •   ChrisW    16 年前

    假设它类似于win32,那么答案是它可能是fifo,但它可能不是(它是其他东西)。例如,一个更高优先级的线程应该是第一个;但是线程的优先级可能会临时提高或降低,这取决于它们最近所做的工作。

        4
  •  4
  •   Spence    16 年前

    作为您问题的答案,所有线程都会收到monitor.pulse,然后为下一个获得锁的人而斗争。

    我相信Wintelect的人写了一篇关于这种行为如何导致不公平情况的博客,但是在监视器中根本没有公平。

        5
  •  3
  •   C. Ross trotttrotttrott    16 年前

    答案从定义上来说是不确定的。