जैसे शीर्षक में। संदेह है कि यह है, लेकिन मैं इसे कहीं भी स्पष्ट रूप से नहीं मिला। और इस संपत्ति के लिए मैं अटकलों पर भरोसा नहीं करना चाहूंगा।क्या विंडोज 'rand_s थ्रेड-सुरक्षित है?
उत्तर
यदि आप सीआरटी के multithreaded संस्करण का उपयोग करते हैं, तो सभी कार्य थ्रेड सुरक्षित हैं, क्योंकि कोई भी थ्रेड-विशिष्ट जानकारी TLS में संग्रहीत है। rand_s वास्तव में पहले स्थान पर राज्य की जानकारी का उपयोग नहीं करता है, क्योंकि यह केवल ओएस एपीआई को कॉल करता है, इसलिए थ्रेड-सुरक्षा का सवाल rand_s के लिए उत्पन्न नहीं होता है। रैंड(), हालांकि एक यादृच्छिक संख्या उत्पन्न करने के लिए बीज मूल्य पर निर्भर करता है।
मैं किसी भी कारण से नहीं सोच सकता कि क्यों rand_s() या यहां तक कि rand() थ्रेड सुरक्षित नहीं होगा।
क्रिस ने कहा: rand()
थ्रेड-सुरक्षित नहीं है क्योंकि इसकी आंतरिक स्थिति स्थैतिक है, लेकिन rand_s()
थ्रेड-सुरक्षित होना चाहिए।
जेफ ने कहा कि एमएसवीसीआरटी के बहुप्रचारित संस्करण के साथ, rand()
का राज्य धागा-स्थानीय भंडारण में आयोजित किया जाता है, इसलिए यह अभी भी ठीक है।
के अनुसार: http://hype-free.blogspot.com/2008/05/multi-threaded-visual-c-rand.html रैंड() अपने राज्य को टीएलएस में संग्रहीत करता है, जिसका अर्थ है कि यह वीसी से थ्रेड-सुरक्षित है पर्यावरण (जो rand_s() के संबंध में विशिष्ट प्रश्न से निहित है)। –
धन्यवाद, सिमुकल, और जेफ! –
विजुअल स्टूडियो रनटाइम लाइब्रेरी के स्रोत के साथ आता है। जबकि इनमें से कुछ के माध्यम से wade के लिए दर्दनाक हो सकता है, rand_s() बहुत सरल है।
सभी rand_s() यादृच्छिक मान प्राप्त करने के लिए ADVAPI32.DLL में SystemFunction036() को कॉल करता है। ADVAPI32.DLL में कुछ भी थ्रेड-सुरक्षित होना चाहिए।
इसके भाग के लिए, rand_s() उस फ़ंक्शन को थ्रेड-सुरक्षित तरीके से पॉइंटर प्राप्त करता है।
मुझे नहीं पता कि rand_s थ्रेड-सुरक्षित है, लेकिन ऐसा लगता है कि ऐसा संभवतः है, क्योंकि यह एंट्रॉपी के लिए ओएस के लिए एक राउंड-ट्रिप बनाने लगता है। (जब तक आप वीसी ++ मल्टी-थ्रेड सीआरटी से लिंक करते हैं, तो यदि आप एकल-थ्रेड से लिंक करते हैं तो सभी शर्त बंद हो जाती हैं)
यदि यह विंडोज सीआरटी द्वारा समर्थित है, तो आप rand_r पर कॉल करने का प्रयास कर सकते हैं जो पॉज़िक्स है रैंड का पुनर्वित्त संस्करण। या यहां तक कि बेहतर बढ़ावा :: यादृच्छिक, यदि आप पहले ही बूस्ट का उपयोग कर रहे हैं।
पर विचार करते हुए कि व्यापक बहु-थ्रेडिंग जल्द ही कैसे होगी, किसी को भी नए कोड में रैंड() का उपयोग नहीं करना चाहिए - हमेशा rand_r/rand_s/boost/विभिन्न प्लेटफ़ॉर्म-निर्भर सुरक्षित रैंड्स/आदि का उपयोग करने का प्रयास करें।
- 1. क्या विंडोज
- 2. क्या .NET विंडोज 7 में शामिल है?
- 3. क्या नकली विंडोज कंसोल एपीआई संभव है?
- 4. क्या गिट विंडोज में काम करता है?
- 5. विंडोज के लिए आईट्यून्स क्या लिखा है?
- 6. क्रॉन का विंडोज संस्करण क्या है?
- 7. विंडोज कुंजी के एएससीआई कोड क्या है?
- 8. diff कमांड के विंडोज समतुल्य क्या है?
- 9. क्या विंडोज पर पेर्लब्रू काम करता है?
- 10. क्या विंडोज 8 संकलित जावास्क्रिप्ट करता है?
- 11. क्या पर्यवेक्षक के लिए विंडोज एनालॉग है?
- 12. क्या गुनीकॉर्न विंडोज
- 13. पुश प्रौद्योगिकी: क्या विंडोज
- 14. डब्ल्यूपीएफ: क्या विंडोज 7
- 15. क्या मैं विंडोज
- 16. क्या "@" विंडोज बैच स्क्रिप्ट
- 17. क्या यह विंडोज आरटी
- 18. क्या मैं विंडोज 7
- 19. यदि NETFX_CORE विंडोज 8 के लिए है, तो विंडोज फोन 8 के लिए क्या है?
- 20. क्या कोई विंडोज रजिस्ट्री "डिक्शनरी" है जो पूरे (या अधिकतर) विंडोज रजिस्ट्री को समझाती है?
- 21. क्या अच्छा है, यदि कोई है, .NET विंडोज ऑटोमेशन लाइब्रेरी?
- 22. क्या किसी ने विंडोज x64
- 23. क्या विंडोज फोन 7 सीरीज एमुलेटर विंडोज एक्सपी पर चलाने के लिए बनाया जा सकता है?
- 24. ऐप.कॉन्फिग के लिए विंडोज आरटी/विंडोज स्टोर ऐप का जवाब क्या है?
- 25. विंडोज फोन 8 कैसे रजिस्टर करें ?? यूएसबी ट्रांसपोर्ट (आईपीओवर यूएसबीएसवीसी) पर विंडोज फोन आईपी क्या है?
- 26. क्या विंडोज के लिए जेएसलिंट का ऑफ़लाइन संस्करण है?
- 27. विंडोज डिफ़ॉल्ट से बेहतर फ़ाइल प्रति विकल्प क्या है?
- 28. क्या एक PHP इंट्रानेट विंडोज लॉगिन साझा कर सकता है?
- 29. विंडोज के लिए एक अच्छी टैर उपयोगिता क्या है?
- 30. जीटीके # और विंडोज फॉर्म के बीच क्या अंतर है?
ठीक है, लेकिन यह अभी भी एक अटकलें है। उदाहरण के लिए रैंड() अपने मौजूदा बीज को सभी धागे द्वारा साझा किए गए चर में संग्रहीत करता है ... और पॉज़िक्स में ऐसे विशेष कार्य होते हैं जिन्हें धागे के अंदर उपयोग के लिए डिज़ाइन किया गया है। –
रैंड() थ्रेड-सुरक्षित नहीं है, क्योंकि स्थैतिक में इसकी आंतरिक स्थिति, जैसे कि एफजेआर ने उल्लेख किया है। हालांकि, rand_s() थ्रेड-सुरक्षित होना चाहिए। –
ने आपको एक सामुदायिक उत्तर क्रिस – mmcdole