windows - mingw-w64 धागे: posix बनाम win32




gcc pthreads (2)

जीसीसी रनटाइम के हिस्सों (विशेष रूप से अपवाद हैंडलिंग) उपयोग किए जा रहे थ्रेडिंग मॉडल पर निर्भर हैं। इसलिए, यदि आप रनटाइम के संस्करण का उपयोग कर रहे हैं जो POSIX थ्रेड के साथ बनाया गया था, लेकिन Win32 API के साथ अपने कोड में थ्रेड बनाने का निर्णय लेते हैं, तो आपको किसी बिंदु पर समस्याएं होने की संभावना है।

भले ही आप रनटाइम के Win32 थ्रेडिंग संस्करण का उपयोग कर रहे हों, आपको शायद Win32 API को सीधे कॉल नहीं करना चाहिए। MinGW FAQ से उद्धरण:

चूंकि मिनजीडब्ल्यू मानक माइक्रोसॉफ्ट सी रनटाइम लाइब्रेरी का उपयोग करता है जो विंडोज के साथ आता है, आपको सावधान रहना चाहिए और एक नया धागा उत्पन्न करने के लिए सही फ़ंक्शन का उपयोग करना चाहिए। विशेष रूप से, CreateThread फ़ंक्शन सी रनटाइम लाइब्रेरी के लिए सही ढंग से स्टैक सेट नहीं करेगा। आपको इसके बजाय _beginthreadex उपयोग करना चाहिए, जो (लगभग) CreateThread के साथ पूरी तरह से संगत है।

मैं विंडोज पर mingw-w64 स्थापित कर रहा हूं और दो विकल्प हैं: win32 threads और posix threads। मुझे पता है कि Win32 थ्रेड और pthreads के बीच क्या अंतर है, लेकिन मुझे नहीं पता कि इन दो विकल्पों के बीच क्या अंतर है। मुझे संदेह है कि अगर मैं पॉज़िक्स धागे का चयन करूंगा तो यह मुझे WinTI कार्यों जैसे CreateThread को कॉल करने से रोक देगा।

ऐसा लगता है कि यह विकल्प निर्दिष्ट करता है कि कौन सा थ्रेडिंग एपीआई कुछ प्रोग्राम या लाइब्रेरी द्वारा उपयोग किया जाएगा, लेकिन क्या? जीसीसी द्वारा, libstdc ++ या किसी और चीज से?

मैंने यह पाया: विंडोज़ के जीसीसी पोर्ट में thread_posixs और thread_win32 के बीच क्या अंतर है?

संक्षेप में, mingw के इस संस्करण के लिए, थ्रेड-पॉज़िक्स रिलीज पॉज़िक्स एपीआई का उपयोग करेगा और std :: thread के उपयोग की अनुमति देगा, और थ्रेड-win32 Win32 API का उपयोग करेगा, और std :: thread part को अक्षम करेगा मानक।

ठीक है, अगर मैं Win32 थ्रेड का चयन करूंगा तो std :: थ्रेड अनुपलब्ध होगा लेकिन Win32 थ्रेड का उपयोग अभी भी किया जाएगा। लेकिन क्या उपयोग किया जाता है?


ध्यान दें कि Win32 थ्रेडिंग मोड में कुछ C ++ 11 std :: थ्रेड का उपयोग करना अब संभव है। ये हेडर-केवल एडाप्टर मेरे लिए बॉक्स से बाहर काम करते हैं: https://github.com/meganz/mingw-std-threads

संशोधन इतिहास से ऐसा लगता है कि इसे mingw64 रनटाइम का एक हिस्सा बनाने का हालिया प्रयास है।







mingw