Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menjana Nombor Rawak Unik dalam Berbilang Benang Menggunakan Fungsi `rand()` C?

Bagaimanakah Saya Boleh Menjana Nombor Rawak Unik dalam Berbilang Benang Menggunakan Fungsi `rand()` C?

Barbara Streisand
Lepaskan: 2024-12-16 09:28:14
asal
980 orang telah melayarinya

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

Penggunaan Berbilang Ulir rand() stdlib

Dalam senario pengaturcaraan berbilang benang, selalunya perlu menjana nombor rawak dalam urutan berasingan. Walau bagaimanapun, apabila menggunakan fungsi rand() perpustakaan standard, anda mungkin menghadapi masalah jika tidak dikendalikan dengan betul.

Isu

Berbilang utas yang melaksanakan fungsi yang sama menghasilkan nombor rawak yang sama berulang kali. Ini kerana setiap urutan biasanya mempunyai salinan data globalnya sendiri, termasuk keadaan dalaman rand(), yang dikongsi oleh semua urutan.

Penyelesaian

Untuk mengelak daripada menjana nombor rawak yang sama , adalah perlu untuk mengurus secara eksplisit keadaan dalaman rand(). Dokumentasi mengesyorkan yang berikut:

  • Gunakan rand_r() dengan Penunjuk Keadaan Eksplisit: rand_r() menyediakan versi rand() selamat benang dengan membenarkan anda lulus penunjuk kepada integer tidak bertanda yang akan digunakan sebagai keadaan.
  • Gunakan drand48_r(3) untuk Pilihan yang Lebih Lemah tetapi Selamat Benang: drand48_r(3) ialah penjana rawak pseudo-rawak selamat benang alternatif yang menggunakan keadaan dalaman yang lebih besar.

Contoh Penggunaan

Sebagai contoh, untuk menggunakan rand_r() dalam persekitaran berbilang benang, anda boleh:

#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;
}
Salin selepas log masuk

Nota Penting

Perlu diambil perhatian bahawa menggunakan rand() atau rand_r() tanpa penyegerakan benang yang betul boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan hasil yang salah. Sentiasa pastikan mekanisme penyegerakan yang betul disediakan untuk mengendalikan akses berbilang benang kepada sumber yang dikongsi, termasuk penjana nombor rawak.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan