Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2008, 09:46   #1
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию Функции ожидания

имею в виду функции типа
DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds);
Возник вопрос - если несколько потоков ждут перехода одного и того же события в сигнальное состояние, то какой из них первым пробудится и завладеет объектом?
нашла немного размышлений по этому поводу:

"Официально Microsoft отвечает на этот вопрос так: «Алгоритм действует честно" Что это за алгоритм, Micro soft не говорит, потому что нс хочст связывать себя обязательствами всегда придер живаться именно этого алгоритма. Она утверждает лишь одно- если объект ожидает ся несколькими потоками, то всякий раз, когда этот объект переходит в свободное состояние, каждый из них получает шанс на пробуждение.

Таким образом, приоритет потока не имеет значения- поток с самым высоким приоритетом не обязательно первым захватит объект. Не получает преимущества и поток, который ждал дольше всех. Есть даже вероятность, что какой-то поток сумеет повторно захватить объект. Конечно, это было бы нечестно по отношению к другим потокам, и алгоритм пытается не допустить этого. Но никаких гарантий нет.

На самом деле этот алгоритм просто использует популярную схему "первым во шел — первым вышел" (FIFO). B принципе, объект захватывается потоком, ждавшим дольше всех. Но в системе могут произойти какие-то события, которые повлияют на окончательное решение, и ил-за этого алгоритм становится менее предсказуемым. Вот почему Microsoft и не хочет говорить, как именно он работает. "

Может быть кто-то с этим сталкивался и поделится опытом, действительно ли здесь работает FIFO и с какой вероятностью.
odi_noki вне форума Ответить с цитированием
Старый 30.10.2008, 11:48   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

вопрос из разряда флудерских....
Моё ИМХО. Может где-то это особо критично, но в большинстве случаев по барабану. Какой поток будет первее в очереди тот первее и получит этот объект (FIFO). На современных компьютерах, и из-за особенностей архитектуры Windows, не важно кто первым получит процессорное время для работы с объектом.
rpy3uH вне форума Ответить с цитированием
Старый 30.10.2008, 12:04   #3
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
На современных компьютерах, и из-за особенностей архитектуры Windows, не важно кто первым получит процессорное время для работы с объектом.
Для меня важно, так как я хочу организовать таким образом очередь потоков.
odi_noki вне форума Ответить с цитированием
Старый 30.10.2008, 19:46   #4
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Создай два разных события
Д'якон вне форума Ответить с цитированием
Старый 31.10.2008, 07:41   #5
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Д'якон,

можно поподробнее?
odi_noki вне форума Ответить с цитированием
Старый 02.11.2008, 09:52   #6
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

А что непонятного? CreateEvent для каждого потока. А потом SetEvent для запуска каждого потока в свое время
Д'якон вне форума Ответить с цитированием
Старый 03.11.2008, 09:00   #7
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Дело в том, что так все равно придется с помощью дополнительных средств запоминать очередность потоков, тем более, создавать на каждый поток событие, при том что количество этих потоков не ограничено.
По поводу поставленного вопроса - сама я убедилась, что FIFO работает не всегда, иногда даже меньше всего ждущий поток получает объект. Но в основном очередь все-таки соблюдается.
odi_noki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции xxxPascalxxx Помощь студентам 2 28.12.2007 18:04
Функции Vinni_puh Microsoft Office Excel 1 20.12.2007 05:51
Функции furian Общие вопросы C/C++ 3 18.12.2007 12:48
Функции Pedro Общие вопросы Delphi 5 08.11.2007 15:39
блокирование функции Fireleo Win Api 5 29.07.2007 17:04