![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 23.10.2011
Сообщений: 14
|
![]()
Два вопроса, оба постараюсь тут уместить, чтобы не плодить темы...
Первое. Недавно пытался синхронизировать три потока при помощи мьютексов Код:
И второй вопрос. В приведенном выше примере была попытка сделать так, чтобы каждый поток генерировал случайные числа от 1 до 3 ( srand(time(NULL)); находится в WinMain). В таком виде ничего не получалось (я прикручивал запись в файлик полученного числа после каждой генерации, и по данным из файла стало ясно, что программа либо генерировала одно и то же тысячами, либо в массиве вообще оставались нули.). Помогло вынесение всех рандомов в отдельную функцию, которую эти потоки вызывают Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
по поводу первого вопроса:
мютекс - один из объектов синхронизации. синхронизация нужна при обращении к данным из разных потоков. внутри одного потока ничего синхронизировать не нужно. отсюда вывод - мютексы можно занимать\освобожать в разных потоках, т.е. ваш код в этом плане вполне корректный. на счет второго вопроса - хз. может быть дело в стандартной библиотеке. не силен в этом. но бывает одно-поточный и много-поточный варианты. это задается где-то в свойствах сборки проекта. может в каждом потоке нужно srand вызывать. если это не делать, то ситуация такая, будто рандом не инициализируется в нужном потоке. Последний раз редактировалось rpy3uH; 24.11.2011 в 08:20. |
![]() |
![]() |
![]() |
#3 | ||
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]() Цитата:
Цитата:
также рекомендую прочитать вот это |
||
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
![]() Цитата:
мьютексы и секции |
|
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 23.10.2011
Сообщений: 14
|
![]()
Когда с мьютексами прога отказалась выдавать нормальные результаты, переделал ее под Event'ы. Когда код сюда копировал, забыл SetEvent на ReleaseMutex обратно поменять... В программе с релиз-мьютексом было изначально)
Цитата:
Последний раз редактировалось rpy3uH; 24.11.2011 в 15:00. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
WinApi+C# | Dimarik | C# (си шарп) | 13 | 20.04.2011 20:05 |
Qt vs. WinAPI | Зелёный_спец | Общие вопросы C/C++ | 3 | 12.03.2010 15:34 |
Использование динамического массива в функции ReadFile (WinAPI). | Korrado | Помощь студентам | 7 | 29.11.2009 13:38 |