आपको एक यादृच्छिक संख्या जनरेटर फ़ंक्शन या फ़ैक्टर ऑब्जेक्ट प्रदान करने की आवश्यकता है जो एक अभिन्न मूल्य प्रकार लेता है और कुछ अभिन्न प्रकार का एक और मान देता है जो कंटेनर की सीमाओं को ओवरफ़्लो नहीं करेगा जो आपके द्वारा फ़ंक्शन में पारित किए गए इटरेटर हैं के माध्यम से पुनरावृत्त इसके अलावा एक functor वस्तु के मामले में, यह operator()
को लागू करना चाहिए ताकि यह एक समारोह की तरह कहा जा सकता है। क्योंकि आप एक धागा सुरक्षित यादृच्छिक संख्या जनरेटर की जरूरत है, एक बुरा विचार cstdlib
से srand
और rand
उपयोग कर रहा है ... आप के बजाय कुछ functor वस्तु है कि एक धागा सुरक्षित यादृच्छिक संख्या जनरेटर को लागू करता है, या एक यादृच्छिक संख्या जनरेटर बनाने चाहिए कि विश्व स्तर पर सुलभ चर लागू नहीं करता है ताकि सब कुछ धागा-स्थानीय भंडारण बनी रहे।
तो उदाहरण के लिए, यह एक तरीका यह काम कर सकता है कि आपके पास कुछ अन्य प्रकार की यादृच्छिक संख्या जेनरेटर है जो आपको किसी अन्य लाइब्रेरी से प्राप्त हुआ है जो केवल मूल्यों की एक निश्चित सीमा के बीच यादृच्छिक मान उत्पन्न करेगा ताकि आप कंटेनर की सीमाओं को परिभाषित कर सकें यादृच्छिक-पहुंच इटरेटर्स के लिए random_shuffle
एल्गोरिदम उपयोग करता है। अब क्या पुस्तकालय आप उपयोग पर निर्भर करता है, तो आप functor की तरह कुछ दिखाई दे सकता है निम्नलिखित:
class my_rand_gen
{
private:
random_gen_type random_range_gen;
int min;
int max;
public:
my_rand_gen(const random_gen_type& gen, int min_range, int max_range):
random_range_gen(gen), min(min_range), max(max_range) {}
int operator()(int value)
{
//ignore the input value and use our own defined range
//returns a value between min and max
return random_range_gen(min, max);
}
};
अब आप की तरह एल्गोरिथ्म कॉल कर सकते हैं:
random_shuffle(my_vector_start_iter, my_vector_end_iter,
my_rand_gen(rand_generator_lib,
vector_start_index,
vector_end_index));
और यह शुरुआत के बीच में वेक्टर शफ़ल होगा और वेक्टर की सीमा ... दूसरे शब्दों में यह केवल vector_start_index
और vector_end_index
के बीच फेरबदल के लिए मूल्यों का उपयोग करेगा बह निकला बिना अपने वेक्टर को iterators खत्म।
आम तौर पर आप इस धारणा है कि * सी ++ पुस्तकालय में कुछ भी नहीं * है बनाना चाहिए थ्रेड-सुरक्षित जब तक दस्तावेज़ अन्यथा नहीं कहता है। –
इसके अलावा, 'थ्रेडसेफ' एक बहुत अधिभारित शब्द है। कुछ एल्गोरिदम केवल तभी सुरक्षित होते हैं जब वे सुरक्षित डेटा पर काम करते हैं। कुछ तब तक सुरक्षित होते हैं जब तक केवल 1 लेखक ही नहीं होते हैं, और अधिकांश इसकी गारंटी नहीं दे सकते हैं। आम तौर पर, यह तय करते समय कि सुरक्षित क्या है (यानी सही), यह आवश्यक है कि आप विभिन्न पढ़ने/लिखने की आवश्यकताओं को निर्दिष्ट करें। – Kylotan
बस स्पष्ट करने के लिए, मैं समानांतर में विभिन्न सूचियों पर शफल करना चाहता हूं।तो मैं डेटा संरचना में दौड़ के बारे में चिंतित नहीं हूं, केवल शफल के लिए यादृच्छिक संख्या की पीढ़ी। – Mark