Просто читая «Параллельное программирование в Windows» Джо Даффи, звучит так, как будто вы обычно получаете поведение FIFO от мониторов .NET, но в некоторых ситуациях этого не происходит.
Стр. 273 книги гласит: «Поскольку мониторы используют объекты ядра внутри, они демонстрируют такое же поведение примерно FIFO, как и механизмы синхронизации ОС (описанные в предыдущей главе). Мониторы несправедливы, поэтому, если другой поток проскользнет». и получает блокировку до того, как пробужденный ожидающий поток попытается получить блокировку, скрытному потоку разрешено получить блокировку. "
Я не могу сразу найти раздел, на который ссылается «в предыдущей главе», но он отмечает , что блокировки были сделаны намеренно несправедливыми в последних выпусках Windows, чтобы улучшить масштабируемость и уменьшить число блокировок .
Вам определенно нужен ваш замок, чтобы быть FIFO? Может быть, есть другой способ решения проблемы. Я не знаю ни одной блокировки в .NET, которая гарантированно будет FIFO.