информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Модель надежности отказоустойчивой... 
 Человек, из-за которого нас заставляют... 
 Взломано популярное расширение... 
 IPv6 добрался до стандарта 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ну тогда хелп ми крутые мужики! 20.05.01 12:07  Число просмотров: 380
Автор: dl <Dmitry Leonov>
Отредактировано 20.05.01 12:08  Количество правок: 1
<"чистая" ссылка>
> > Потоки надо создавать не с помощью CreateThread, а
> > _beginthreadex
> > :))
> Это решает проблему или просто позволяет улыбнуться?

В данном случае - очень вряд ли. Лично у меня в single-threaded приведенный код честно выдал 20 разных чисел и так, что, в принципе, вполне объяснимо.
Все эти single-threaded, multi-threaded важны исключительно для функций из стандартной библиотеки, которые используют какие-то переменные для хранения промежуточных результатов. Берем ту же пару srand/rand. Srand инициализирует генератор псевдослучайных чисел, полученное значение надо где-то сохранить. В случае использования multithreaded и _beginthreadex для каждого потока все эти глобальные переменные будут своими. Т.е. srand, выполненный в главном потоке, не будет иметь никакого отношения к randам из дочерних потоков, и все они просто запустятся непроинициализированными (есть еще шанс, что дочерние потоки унаследуют значения глобальных библиотечных переменных от родительского, но зуб не дам, надо смотреть). CreateThread весь этот механизм обходит стороной, и в результате в сочетании с single-threaded все должно работать, как задумано.
Но вообще, гораздо корректнее было бы инициализировать srand в каждом потоке, отталкиваясь от идентификатора потока и времени.
<programming> Поиск 








Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2017 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach