首頁 >後端開發 >C++ >如何使用 C 的'rand()”函數在多個執行緒中產生唯一的隨機數?

如何使用 C 的'rand()”函數在多個執行緒中產生唯一的隨機數?

Barbara Streisand
Barbara Streisand原創
2024-12-16 09:28:14981瀏覽

How Can I Generate Unique Random Numbers in Multiple Threads Using C's `rand()` Function?

stdlib 的 rand() 的多執行緒使用

在多執行緒程式設計場景中,經常需要在單獨的執行緒中產生隨機數。但是,在使用標準函式庫的 rand() 函數時,如果處理不當,可能會遇到問題。

問題

多個執行緒執行相同函數重複產生相同的隨機數。這是因為每個執行緒通常都有自己的全域資料副本,包括 rand() 的內部狀態,該副本由所有執行緒共用。

避免產生相同的隨機數,有必要明確管理 rand() 的內部狀態。文件建議如下:

  • 將rand_r() 與顯式狀態指標一起使用: rand_r() 提供了rand() 的執行緒安全版本,讓您可以傳遞指向將用作狀態的無符號整數的指標。
  • 使用drand48_r(3) 用於較弱但執行緒安全的選項: drand48_r(3) 是另一種執行緒安全的偽隨機產生器,它使用更大的內部狀態。

範例用法

例如,要在多執行緒環境中使用rand_r(),您可以:

#include <stdlib.h>

void* thread_function(void* arg) {
  unsigned int state = 0;  // Thread-specific state
  while (1) {
    int random_number = rand_r(&state);
    // Do something with random_number
  }
  return NULL;
}

重要提示

重要提示應該注意的是,在沒有正確執行緒同步的情況下使用rand() 或rand_r()可能會導致不可預測的行為和不正確的結果。始終確保適當的同步機製到位,以處理對共享資源的多執行緒訪問,包括隨機數產生器。

以上是如何使用 C 的'rand()”函數在多個執行緒中產生唯一的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn