国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

技巧 多線程下的隨機數(shù)初始化

2019-11-17 05:16:59
字體:
供稿:網(wǎng)友

  今天在調(diào)試程序時候發(fā)現(xiàn)某個線程中的 rand() 隨機函數(shù)每次運行都返回同一個數(shù)據(jù),檢查了程序,在程序中也調(diào)用了 srand(GetTicketCount()) 來初始化隨機數(shù)生成器,那為什么每次運行結(jié)果還一樣呢???  

  后來發(fā)現(xiàn),這個問題和多線程有關(guān),跟蹤 srand 和 rand 的函數(shù)內(nèi)部后發(fā)現(xiàn),其實 srand 和 rand 內(nèi)部是使用了TlsGetValue等函數(shù)來存儲隨機數(shù)種子了,也就是說,這個隨機數(shù)種子對每個線程都需要初始化一次 srand,而以前的代碼是在主線程中初始化了一次,當然每次的結(jié)果都一樣了。
  void __cdecl srand (

   unsigned int seed

   )
  {

  #ifdef _MT 

   _getptd()->_holdrand = (unsigned long)seed;  

  #else /* _MT */

  holdrand = (long)seed;

  #endif /* _MT */

  }  

  _ptiddata __cdecl _getptd (

   void

   )
  {   _ptiddata ptd;

   DWord TL_LastError;  

   TL_LastError = GetLastError();

   if ( (ptd = TlsGetValue(__tlsindex)) == NULL ) {

   /*

   * no per-thread data strUCture for this thread. try to create

   * one.

   */

   if ( ((ptd = _calloc_crt(1, sizeof(struct _tiddata))) != NULL) &&

   TlsSetValue(__tlsindex, (LPVOID)ptd) ) {  

   /*

   * Initialize of per-thread data

   */

   _initptd(ptd);  

   ptd->_tid = GetCurrentThreadId();

   ptd->_thandle = (unsigned long)(-1L);

   }

   else

   _amsg_exit(_RT_THREAD); /* write message and die */

   }  

   SetLastError(TL_LastError);  

   return(ptd);
  }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂东县| 枣强县| 西贡区| 荆门市| 红河县| 九龙县| 丰城市| 攀枝花市| 望谟县| 上杭县| 米易县| 安宁市| 凤冈县| 资中县| 沈丘县| 定安县| 永德县| 惠安县| 榆社县| 保康县| 吴川市| 崇文区| 凤翔县| 东山县| 南召县| 镇康县| 边坝县| 永德县| 大冶市| 通山县| 利津县| 都昌县| 榆林市| 辉县市| 登封市| 云林县| 博客| 保定市| 太仓市| 台州市| 灵璧县|