Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Nombor Rawak Unik dalam Aplikasi C Berbilang Benang?

Bagaimanakah Saya Boleh Menjana Nombor Rawak Unik dalam Aplikasi C Berbilang Benang?

Linda Hamilton
Linda Hamiltonasal
2024-12-13 14:24:11226semak imbas

How Can I Generate Unique Random Numbers in Multithreaded C   Applications?

Penjanaan Nombor Berbilang dan Random dengan rand() stdlib

Aplikasi berbilang benang selalunya memerlukan setiap urutan menjana urutan nombor rawak yang unik. Walau bagaimanapun, menggunakan fungsi perpustakaan standard srand(time(0)) untuk menyemai penjana nombor rawak (RNG) boleh membawa kepada hasil bukan rawak.

Isu Keselamatan Benang

srand(time(0)) memulakan keadaan dalaman RNG, yang digunakan untuk menjana nombor rawak pseudo. Dalam persekitaran berbilang benang, berbilang benang boleh mengakses keadaan RNG yang sama secara serentak, membawa kepada nilai benih dikongsi dan urutan nombor yang sama.

Penyelesaian: Benih-Selamat Benang

Untuk memastikan penjanaan nombor rawak selamat benang, adalah disyorkan untuk menggunakan fungsi rand_r(), yang mengambil hujah keadaan yang jelas. Dengan menghantar pembolehubah keadaan unik kepada setiap utas, keadaan RNG boleh diasingkan, membenarkan setiap utas menjana urutan rawaknya sendiri.

Alternatif: Penjana Thread-Safe

Sebagai alternatif, pertimbangkan untuk menggunakan fungsi drand48(), yang direka khusus untuk aplikasi berbilang benang. Ia menyediakan sumber entropi yang lebih besar dan lebih dipercayai daripada rand(), dan ia selamat untuk benang secara lalai.

Contoh Penggunaan:

#include <stdlib.h>

unsigned int thread_state;

void thread_function() {
  // Seed the state for this thread
  rand_r(&thread_state);

  // Generate random numbers using the seeded state
  int random_number = rand_r(&thread_state);
}

Kesimpulan:

Apabila menggunakan rand() dalam persekitaran berbilang benang, adalah penting untuk menyemai RNG dengan fungsi selamat benang seperti rand_r(). Sebagai alternatif, pertimbangkan untuk menggunakan penjana nombor rawak selamat benang seperti drand48(). Ini memastikan bahawa setiap urutan menjana urutan nombor rawaknya yang unik, mengelakkan isu nombor yang sama merentas urutan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak Unik dalam Aplikasi C Berbilang Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn