![]() |
|
![]() |
#2892 |
Junior Member
Регистрация: 13.06.2010
Сообщений: 18
|
![]()
А я сейчас выпила пол бутылки коньяка...я давно себя так хорошо не чувствовала....еще бы водочкой шлифануть)))) Сейчас устрою пьяные бродилки по форуму...
|
---------
...отцвели голубые,
все цветы полевые... |
|
![]() |
![]() |
#2893 |
Silver Member
Регистрация: 07.02.2013
Сообщений: 718
|
![]()
Галчонка, тож хорошо.
выходные все-таки ![]() |
![]() |
![]() |
#2894 |
Platinum Member
Регистрация: 16.06.2014
Адрес: default city
Сообщений: 4,226
|
![]() |
---------
к.х.н., 02.00.06
|
|
![]() |
![]() |
#2895 |
Platinum Member
Регистрация: 07.02.2009
Адрес: Москва
Сообщений: 7,542
|
![]() |
![]() |
![]() |
#2896 |
Platinum Member
Регистрация: 16.06.2014
Адрес: default city
Сообщений: 4,226
|
![]() |
---------
к.х.н., 02.00.06
|
|
![]() |
![]() |
#2897 |
Gold Member
Регистрация: 19.01.2011
Адрес: Here, there and everywhere
Сообщений: 1,551
|
![]() |
---------
Все сбудется, стоит только расхотеть.
|
|
![]() |
![]() |
#2898 |
Platinum Member
Регистрация: 07.02.2009
Адрес: Москва
Сообщений: 7,542
|
![]() |
![]() |
![]() |
#2899 |
Gold Member
Регистрация: 08.04.2012
Адрес: Воронеж
Сообщений: 2,056
|
![]() |
---------
Грамотей-опричникъ
Сварщик я не настоящий, а сюда просто пописать зашел |
|
![]() |
![]() |
#2900 |
Gold Member
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,830
|
![]()
kravets, проблема рандомизации доступа к ресурсу с использованием мьютекса решилась.
В классике каждый поток перед доступом к ресурсу пытается захватить мьютекс и если не получается уходит в спячку, пока мьютекс не освободится и система отдаст мьютекс потоку. Код:
if WaitForSingleObject(ResMutex,INFINITE) = WAIT_OBJECT_0 then begin . < работа с ресурсом > . ReleaseMutex(ResMutex); end; Система отслеживает время непрерывного ожидания и при освобождении мьютекса выбирает тот поток, который дольше всех ждал (при равных приоритетах). А нам нужен случайный выбор. Ну так давайте спутаем все карты системе и будем ждать не непрерывно, а случайно-дискретно. Код:
flag:= False; while not(flag) do begin dt:= 10 + 20 * Random; if WaitForSingleObject(ResMutex, dt) = WAIT_OBJECT_0 then flag:= True; end; if (flag) then begin . < работа с ресурсом > . ReleaseMutex(ResMutex); end; Минус метода - низкое быстродействие, но мне и не нужно быстро. Потоки в среднем раз в секунду обращаются к ресурсу. По сути получилась спин-блокировка с ожиданиями в течение случайных dt. Протестировал в имитационной модели. Статистические показатели отлично сходятся с расчетными. Последний раз редактировалось Paul Kellerman; 04.08.2014 в 05:56. |
![]() |