Выбор потока для запуска при выходе из блокировки
От: Аноним  
Дата: 22.11.10 16:49
Оценка:
Всем привет!

Подскажите пожалуйста, в каком порядке винда будет запускать потоки при выводе из блокировки?

У меня есть задача — нужно строго в определённом порядке класть в очередь сообщения. Добавление идёт из разных потоков. Доступ к очереди синхронизирую через lock(). Суммарно приходит порядка 50-ти сообщений в секунду. Как мне кажется, есть достаточно большая вероятность, что два потока начнут ждать пока третий добавит в очередь и после освобождения ресурса может запуститься не тот поток.
Re: Выбор потока для запуска при выходе из блокировки
От: Sinix  
Дата: 22.11.10 16:56
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>У меня есть задача — нужно строго в определённом порядке класть в очередь сообщения. Добавление идёт из разных потоков. Доступ к очереди синхронизирую через lock(). Суммарно приходит порядка 50-ти сообщений в секунду. Как мне кажется, есть достаточно большая вероятность, что два потока начнут ждать пока третий добавит в очередь и после освобождения ресурса может запуститься не тот поток.


Без явной синхронизации говорить о последовательности распараллеленных событий бессмысленно (сорри за тавтологию). Самый простой способ — сортировать сообщения при вставке.
Re: Выбор потока для запуска при выходе из блокировки
От: Jolly Roger  
Дата: 22.11.10 18:27
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Всем привет!


А>Подскажите пожалуйста, в каком порядке винда будет запускать потоки при выводе из блокировки?


Алгоритм планировщика не документирован. В разных источниках приводятся его описания, но все они настоятельно рекомендуют ни в коем случае не строить свою логику на этих описаниях. В реальности этот алгоритм меняется от версии к версии. Если Вам нужна строгая очерёдность, то Вам придётся обеспечить её самому.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.