के बाहर से निष्पादन को अवरुद्ध करने के लिए एक म्यूटेक्स का उपयोग करना मुझे यकीन नहीं है कि मुझे शब्दावली सही है लेकिन यहां जाता है - मेरे पास यह फ़ंक्शन है जो एकाधिक धागे द्वारा डेटा लिखने के लिए उपयोग किया जाता है (टिप्पणियों में छद्म कोड का उपयोग करके मैं चाहता हूँ)महत्वपूर्ण अनुभाग
//these are initiated in the constructor
int* data;
std::atomic<size_t> size;
void write(int value) {
//wait here while "read_lock"
//set "write_lock" to "write_lock" + 1
auto slot = size.fetch_add(1, std::memory_order_acquire);
data[slot] = value;
//set "write_lock" to "write_lock" - 1
}
लेखन के आदेश महत्वपूर्ण नहीं है, सब मैं यहाँ की जरूरत है हर हालांकि कभी-कभार
हर एक अद्वितीय स्लॉट में जाने के लिए लिखने के लिए, मैं एक धागा आवश्यकता को पढ़ने के लिए इस फ़ंक्शन का उपयोग करने वाला डेटा
int* read() {
//set "read_lock" to true
//wait here while "write_lock"
int* ret = data;
data = new int[capacity];
size = 0;
//set "read_lock" to false
return ret;
}
,210
तो यह मूल रूप बफर बाहर स्वैप और एक पुरानी
सिद्धांत रूप में यह 2 ऑपरेटिंग स्थितियों के लिए नेतृत्व करना चाहिए (मैं के टुकड़े कम करने के लिए हटा दिया क्षमता तर्क है) देता है:
1 - सिर्फ एक कंटेनर में लिखने वाले धागे का गुच्छा
2 - जब कुछ धागे पढ़ने के कार्य को निष्पादित करते हैं, तो सभी नए लेखकों को इंतजार करना होगा, पाठक तब तक इंतजार करेंगे जब तक कि सभी मौजूदा लेखन समाप्त नहीं हो जाते हैं, फिर यह पढ़ा तर्क और परिदृश्य 1 करेगा जारी रख सकते हैं।
प्रश्न बात यह है कि मैं एक बाधा किस तरह ताले के लिए उपयोग करने के लिए पता नहीं है है -
के बाद से वहाँ इस तरह के कई कंटेनर हैं और वे सभी CPU चक्र की जरूरत है एक spinlock बेकार होगा
मुझे नहीं पता कि std :: mutex को कैसे लागू किया जाए क्योंकि मैं केवल फ़ंक्शन फ़ंक्शन ट्रिगर होने पर लिखने का कार्य एक महत्वपूर्ण खंड में होना चाहता हूं। एक म्यूटेक्स में पूरे लेखन समारोह को लपेटने से परिचालन परिदृश्य के लिए अनावश्यक मंदी हो जाएगी।
तो यहां इष्टतम समाधान क्या होगा?
मुझे लगता है कि यह प्रश्न उपयोगी हो सकता है https://stackoverflow.com/questions/14306797/c11-equivalent-to-boost-shared-mutex –
तो आपको लेखक धागे को स्वयं के बीच सिंक्रनाइज़ करने की आवश्यकता नहीं है क्योंकि वे हमेशा डेटा के अद्वितीय भागों तक पहुंचें? – Galik
@ गैलिक इस मामले में लेखक धागे को एआई, यूआई और विभिन्न आवृत्तियों पर चल रहे विश्व सिमुलेशन प्रभावों को पूल किया गया है, मुझे अपने आउटपुट को जीपीयू में पाइप करने की ज़रूरत है जो अपने स्वयं के अपडेट अंतराल पर चल रहा है लेकिन उनके पास एक दूसरे के साथ कुछ लेना देना नहीं है परिवहन के दौरान – user81993