IIRC, весьма вероятно, что будет в таком порядке, но это не гарантировано.Я полагаю, что есть, по крайней мере, теоретически случаи, когда поток будет пробужден ложно, заметьте, что он все еще не имеет блокировки, и перейдите в конец очереди.Возможно, это только для Wait
/ Notify
, но у меня есть скрытое подозрение, что это также для блокировки.
I определенно не будет полагаться на это - если вам нужны вещичтобы произойти в последовательности, создайте Queue<T>
или что-то подобное.
РЕДАКТИРОВАТЬ: Я только что нашел это в параллельного программирования Джо Даффи в Windows , который в основном согласен:
Поскольку мониторы используют объекты ядра внутри, они демонстрируют то же поведение, примерно, FIFO, что и механизмы синхронизации ОС (описанные в предыдущей главе).Мониторы несправедливы, поэтому, если другой поток пытается получить блокировку до того, как пробужденный ожидающий поток попытается получить блокировку, скрытному потоку будет разрешено получить блокировку.
Бит «примерно-FIFO»это то, о чем я думал раньше, и бит «подлый поток» является еще одним доказательством того, что вы не должны делать предположений относительно порядка FIFO.