マルチスレッド プログラミング シナリオでは、多くの場合、別のスレッドで乱数を生成する必要があります。ただし、標準ライブラリの rand() 関数を使用する場合、正しく処理されないと問題が発生する可能性があります。
同じ関数を実行する複数のスレッドは、同じ乱数を繰り返し生成します。これは、通常、各スレッドには、すべてのスレッドで共有される rand() の内部状態を含むグローバル データの独自のコピーがあるためです。
同じ乱数の生成を避けるための場合、rand()の内部状態を明示的に管理する必要があります。ドキュメントでは次のことを推奨しています:
たとえば、マルチスレッド環境で rand_r() を使用するには、次のようにします。 would:
#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 中国語 Web サイトの他の関連記事を参照してください。