Masalahnya berpunca daripada membuat contoh
baru dalam setiap lelaran gelung. Oleh kerana Random
sering disukai menggunakan jam sistem, gelung yang dilaksanakan dengan cepat boleh berulang kali memulakan objek Random
dengan benih yang sama, yang membawa kepada output yang sama. Random
contoh di semua panggilan. Ini memastikan kemas kini keadaan yang konsisten dan menghalang nilai benih berulang. Untuk mengendalikan senario pelbagai threaded dengan selamat, kunci digunakan untuk menyegerakkan akses. Random
yang diperbetulkan: RandomNumber
private static readonly Random random = new Random(); private static readonly object syncLock = new object(); public static int RandomNumber(int min, int max) { lock (syncLock) { // Thread-safe access return random.Next(min, max); } }
tunggal dan menyegerakkan akses dengan random
, RNG akan mengekalkan keadaan dalamannya, menghasilkan nombor rawak yang unik pada setiap panggilan dalam gelung. lock
Atas ialah kandungan terperinci Mengapa penjana nombor rawak saya hanya menghasilkan satu nombor unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!