Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Nombor Rawak Unik dalam Aplikasi C Berbilang Benang?
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!