मैं कुछ कोड है जो लग रहा है इस तरह एक सा है:थ्रेड सुरक्षा :: random_device
std::random_device
धागा सुरक्षित है:std::random_device rd; #pragma omp parallel { std::mt19937 gen(rd()); #pragma omp for for(int i=0; i < N; i++) { /* Do stuff with random numbers from gen() */ } }
मैं कुछ प्रश्न हैं? यानी क्या यह कुछ अवांछित करने जा रहा है जब कई धागे इसे एक बार में बुलाते हैं?
- क्या यह आम तौर पर एक अच्छा विचार है? क्या मुझे यादृच्छिक संख्या धाराओं को ओवरलैप करने के बारे में चिंतित होना चाहिए?
- क्या मैं चाहता हूं कि प्राप्त करने के लिए एक बेहतर तरीका है (प्रत्येक धागे में स्वतंत्र यादृच्छिक संख्या धाराएं - मैं फिलहाल पुनरुत्पादन के बारे में चिंतित नहीं हूं)?
मामले में यह std::random_device
के कामकाज मैं मुख्य रूप से विंडोज पर चल रहा हूँ करने के लिए कोई फर्क है, हालांकि मैं भी लिनक्स और OSX पर समान रूप से काम करने के लिए कोड चाहते हैं।
आप पुनरुत्पादन प्राप्त कर सकते हैं लेकिन 'std :: random_device' का उपयोग करने के बजाय एक विशिष्ट बीज का उपयोग कर सकते हैं। – Galik
'random_device' अवरुद्ध होने की संभावना है। यदि आप जो चाहते हैं वह समांतरता है, तो इसका उपयोग करने में कोई और बात नहीं है। आप 'mt19937' बीज के लिए' random_device' के साथ बीजित वैश्विक पीआरएनजी का उपयोग कर सकते हैं (लेकिन इसे स्पष्ट लॉकिंग की आवश्यकता होगी)। – sbabbi