मैं एक बहुप्रचारित सी ++ प्रोग्राम लिख रहा हूं और एक बहुप्रचारित सी लाइब्रेरी का उपयोग करना चाहता हूं।
यह लाइब्रेरी मुझे यह कुछ कार्यकर्ता धागे बना सकते हैं और (इस जैसे अपनी दौड़ को नियंत्रण बढ़ाने के) कोड का उपयोग कर समारोह का निवासी प्रणाली तरीकों का उपयोग करने की उम्मीद:मिक्सिंग सी ++ 11 std :: थ्रेड और सी सिस्टम थ्रेड्स (यानी pthreads)
void system_specific_thread_init();
#ifdef _WIN32
DWORD WINAPI system_specific_thread_run(LPVOID unused)
{
library_run();
return 0;
}
void system_specific_thread_init()
{
Createthread(NULL, 0, system_specific_thread_run, NULL, 0, NULL);
}
#else
void* system_specific_thread_run(void *unused)
{
library_run();
return NULL;
}
void system_specific_thread_init()
{
pthread_t id;
pthread_create(&id, NULL, system_specific_thread_run, NULL);
}
#endif
system_specific_thread_init();
जिसके बाद यह प्रासंगिक देशी प्रणाली म्युटेक्स का उपयोग करेगा अन्य मूल सिस्टम धागे के तरीकों के साथ काम करने के दौरान अपने कार्यों को कॉल करने के तरीके।
हालांकि, मैं अपने सभी धागे बनाने और प्रबंधित करने के लिए सी ++ 11 <thread>
लाइब्रेरी का उपयोग कर रहा हूं। मैं std::thread(library_run)
के साथ कार्यकर्ता थ्रेड (ओं) बनाना चाहता हूं और अन्य ऐसे धागे से लाइब्रेरी फ़ंक्शंस को कॉल करना चाहता हूं।
क्या यह करने के लिए सुरक्षित है, या DS9K राक्षसों को मेरी नाक से उड़ने का कारण बन जाएगा?
मुझे नहीं पता कि यह उत्तर प्रश्न के लिए प्रासंगिक कैसे है - यदि सी लाइब्रेरी को केवल सिस्टम म्यूटेक्स का उपयोग करने की आवश्यकता है तो देशी धागे हैंडल प्राप्त करने की आवश्यकता नहीं है। – cmeerw
@Pete क्या आप कृपया अपने उत्तर पर विस्तृत जानकारी दे सकते हैं? –
@LexiR - मेरी माफ़ी; @cmeerw सही है - मेरा जवाब, तकनीकी रूप से सही होने पर, वास्तव में आपके द्वारा पूछे जाने वाले पते को संबोधित नहीं करता है। आम तौर पर, म्यूटेक्स थ्रेड विवरण पर निर्भर नहीं होते हैं, इसलिए देशी म्यूटेक्स का उपयोग करना शायद ठीक है। दूसरी तरफ, यदि आप std :: mutex (std :: lock_guard के साथ) का उपयोग करते हैं तो आपको अपवाद-सुरक्षित लॉकिंग और अनलॉकिंग मिलती है, उसी वर्ण के साथ जो मैंने ऊपर वर्णित किया है, शायद सिस्टम म्यूटेक्स तक पहुंच जाए। –