2012-04-15 9 views
10

कैप्शन काफी ज्यादा कहता है।क्या किसी को प्रति थ्रेड या प्रति प्रक्रिया क्रमशः बीज को srand() सी फ़ंक्शन कॉल करने की आवश्यकता है?

पीएस। यह सी ++ विंडोज प्रोग्राम के लिए है।

+1

कृपया अपना कोड दिखाएं ... –

उत्तर

14

the MSDN documentation on srand() के अनुसार (आप माइक्रोसॉफ्ट के सी क्रम पुस्तकालय का उपयोग कर रहे कल्पना करते हुए), बीज धागे की स्थानीय है, तो आप प्रत्येक थ्रेड कि rand() उपयोग कर रहा है के लिए srand() कॉल करने के लिए की जरूरत है। ध्यान दें कि यह अन्य कार्यान्वयन में मामला नहीं हो सकता है।

MSDN से हवाला देते हुए:

srand समारोह वर्तमान सूत्र में कूट-यादृच्छिक पूर्णांकों की एक श्रृंखला पैदा करने के लिए प्रारंभिक बिंदु निर्धारित करता है।

+0

मुझे लगता है कि यह गैर मानक है। – Nawaz

+2

@ नवाज: यह गैर-मानक है, POSIX को थ्रेड-सुरक्षित होने के लिए 'srand()' या 'rand()' की आवश्यकता नहीं है। – dreamlax

+0

धन्यवाद। मैनें इसे खो दिया। तो, हाँ, ऐसा लगता है कि हर धागे को पहले बीज करना होगा ... क्या परेशानी है। – ahmd0

2

नहीं, मानक के अनुसार, क्योंकि एक बार जब आप srand() पर कॉल करते हैं तो यह सभी धागे से rand() कॉल को प्रभावित करता है।

सी पुस्तकालय समारोह srand() एकल पिरोया जैसे अन्य सभी कार्य हैं, जिसका मतलब है अगर तुम फोन srand() एक धागे से, यह संख्या-seqeunce रूप में अच्छी तरह अन्य धागे में rand() से उत्पन्न प्रभावित करता है।

लेकिन माइक्रोसॉफ्ट गैर मानक srand() प्रदान करता है जो आपको सभी धागे से कॉल करने की आवश्यकता है।

+1

अच्छा, तकनीकी रूप से यह सही उत्तर भी है, हालांकि आपको कहा जाना चाहिए, "हां" आपके शुरुआती कथन में - जिसका अर्थ है, हाँ, प्रत्येक थ्रेड पर इसे कॉल करने के लिए, दाएं)) – ahmd0

+3

@ ahmd0: मानक के मुताबिक, यह 'नहीं 'होना चाहिए। – Nawaz

+0

माइक्रोसॉफ्ट का उल्लंघन करने वाले मानक केवल पॉज़िक्स थ्रेडिंग मानक और सी ++ 11 मानकों हैं, जिनमें से कोई भी माइक्रोसॉफ्ट का मानना ​​नहीं है। माइक्रोसॉफ्ट का कार्य गैर मानक नहीं है, यह विंडोज थ्रेडिंग मानक के अनुरूप है, जो कई तरीकों से पॉज़िक्स मानक से अलग है। यह सिर्फ उनमें से एक है। (और माइक्रोसॉफ्ट ने इसे सही पाया, पॉज़िक्स/आईएसओ ने इसे गलत पाया। ऊपर मेरी टिप्पणी देखें।) –

5

यहां तक ​​कि अगर इस सवाल का जवाब किसी प्लेटफ़ॉर्म विशिष्ट नहीं थे मैं तुम्हें srand() से बचने और बजाय <random> का उपयोग सुझाव देना चाहेंगे। सी ++ 11 <random> लाइब्रेरी न केवल बहुप्रचारित कार्यक्रमों में स्पष्ट अर्थशास्त्र प्रदान करती है बल्कि यह यादृच्छिक संख्या पीढ़ी के लिए भी बेहतर सुविधाएं प्रदान करती है। यह विभिन्न गुणवत्ता, गति, और आकार की आवश्यकताओं को पूरा करने के लिए कई अलग-अलग यादृच्छिक संख्या जेनरेटर प्रदान करता है, और कई मानक वितरण इसलिए आप rand का उपयोग करते समय अक्सर गलतियों को नहीं करेंगे।

+0

क्या मैं एमएफसी के उपयोग से लिखे गए एमएस वीएस 2008 सी ++ प्रोग्राम में इसका उपयोग कर सकता हूं? – ahmd0

+0

मुझे लगता है कि इसे वीएस -2010 में जोड़ा गया था, लेकिन एमएफसी @ अहमद 0 – bames53

+0

हाँ, धन्यवाद के साथ कोई संघर्ष नहीं है। मुझे लगता है कि मैं यहां पुराने मानक के साथ फंस गया हूँ; ( – ahmd0

संबंधित मुद्दे