Penjanaan Nombor Rawak Berbilang Thread dengan rand() stdlib
Apabila menjana nombor rawak daripada berbilang benang yang melaksanakan fungsi yang sama, adalah penting untuk memahami bagaimana rand() berfungsi beroperasi.
Kepentingan srand(masa(0))
srand(time(0)) memulakan benih untuk penjana nombor rawak. Secara umumnya disyorkan untuk memanggil fungsi ini sekali sahaja bagi setiap program, sebaik-baiknya pada permulaan fungsi main(). Ini memastikan benih unik untuk keseluruhan tempoh program.
Pertimbangan Keselamatan Benang
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa rand() tidak selamat untuk benang, bermakna ia adalah tidak dijamin menghasilkan nombor unik apabila digunakan oleh berbilang benang secara serentak. Seperti yang dinyatakan dalam dokumentasi, ia menggunakan keadaan tersembunyi yang akan diubah suai pada setiap panggilan.
Alternatif untuk Aplikasi Berbilang Thread
Untuk penjanaan nombor rawak selamat benang, dinasihatkan untuk menggunakan fungsi rand_r() sebaliknya. Fungsi ini mengambil parameter keadaan eksplisit, yang membolehkan berbilang benang membenihkan penjana secara bebas.
Sebagai alternatif, fungsi drand48_r(3) menawarkan penjana pseudorandom berkualiti tinggi yang sesuai untuk persekitaran berbilang benang. Ia menggunakan keadaan dalaman yang lebih besar daripada rand_r(), menghasilkan kualiti rawak yang lebih baik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak Selamat Benang dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!