Заявление о блокировке C # - PullRequest
6 голосов
/ 18 февраля 2009

Скажем, у меня есть три потока, которым нужен доступ к коллекции, и я использую блокировку вокруг доступа в каждом потоке. Происходит следующее ...

(1) Поток 1 получает блокировку коллекции
(2) Тема 2 блокируется
(3) Тема 3 блокируется

Когда Поток 1 снимает блокировку, кто получит блокировку следующим? Это доступ FIFO?

Спасибо

Ответы [ 5 ]

17 голосов
/ 18 февраля 2009

Вам не важно, кто получит следующий замок.

5 голосов
/ 18 февраля 2009

Ваш вопрос подразумевает, что вы ищете поведение FIFO? Тогда вы можете попробовать этот код от Jakub Sloup:

Монитор / замок, который запоминает порядок в C # для имитации FIFO

Как уже упоминалось в других ответах, нет ожидающего порядка, ожидающие потоки получат блокировку.

4 голосов
/ 18 февраля 2009

Как ответ на ваш вопрос, все потоки получают monitor.pulse, который затем будет бороться за то, кто получит блокировку следующим.

Я считаю, что люди из wintellect написали блог о том, как такое поведение может привести к несправедливой ситуации, но в мониторе нет никакой справедливости.

4 голосов
/ 18 февраля 2009

Если предположить, что это как Win32, то ответ таков: это может быть FIFO, а может и нет (это может быть что-то еще) Например, поток с более высоким приоритетом должен быть первым; но потоки могут получить временное повышение или понизить свой приоритет в зависимости от того, что они делали в последнее время.

3 голосов
/ 19 февраля 2009

Ответ по определению неопределенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...