2010-05-09 9 views
11

मैं विंडोज के लिए थ्रेडिंग समर्थन की अनुमति देने के लिए pthreads-win32 का उपयोग कर रहा हूं।विभिन्न विंडोज कंपाइलर्स पर pthreads-win32 की पोर्टेबिलिटी

मेरे पास एक क्रॉस प्लेटफ़ॉर्म प्रोजेक्ट है जो pthreads का उपयोग करता है और मैं इसे विभिन्न कंपाइलर्स और विभिन्न ओएस संस्करणों के साथ विंडोज़ पर काम करना चाहता हूं।

कम से कम, प्रलेखन के अनुसार pthreads-win32 को एमएसवीसी के साथ काम करना चाहिए और यहां तक ​​कि एमएसवीसी प्रदान करता है।

लेकिन मुझे नहीं पता कि पुस्तकालय का परीक्षण एमएसवीसी-2008 और जैसे नवीनतम एमएसवीसी कंपाइलर्स के साथ किया जाता है यदि यह 64 बिट विंडोज़ के तहत समर्थित है।

से आपका खुद का अनुभव क्या आप इस पुस्तकालय के साथ किसी भी मुद्दे से अवगत हैं?

  • एमएसवीसी 8, एमएसवीसी 9, एमएसवीसी 10 के साथ कोई समस्या?
  • विंडोज x86_64 के साथ कोई समस्या?
  • विंडोज विस्टा/विंडोज 7 के साथ कोई समस्या?

नोट्स:

  • भी Boost.Thread उपयोग करने की अनुशंसा की कोशिश मत करो, मैं में कोई दिलचस्पी नहीं हूँ और मैं Boost.Thread पुस्तकालय से परिचित
  • मैं कर रहा हूँ। Win32 एपीआई के साथ व्हील को पुन: पेश करने में रूचि नहीं है (जिसमें आरडब्ल्यू-लॉक्स, सशर्त चर, आदि शामिल हैं)।
  • मैंने एमएसवीसी -2008 और मिनजीडब्ल्यू जीसीसी-4.3 के साथ एक परियोजनाओं को संकलित करने में कामयाब रहे और फिर पाथ्रेड के मौजूदा प्री-कंपाइल डीएलएल का उपयोग करके इसे आसानी से यूनिट परीक्षण चलाया।

मुझे केवल pthreads-win32 की सीमाओं को जानने की आवश्यकता है।

+0

** पोर्टेबल ** आप केवल विंडोज संस्करणों के बीच ही हैं? यदि ऐसा है, तो मैं कर्नेल 32 एपीआई से चिपके रहूंगा। या pthread-win32 का उपयोग कर वहाँ महत्वपूर्ण लाभ है? – jweyrich

+0

@jweyrich। मेरा मतलब है कि मैं इसे नवीनतम एमएसवीसी -2008 और | के साथ उपयोग कर सकता हूं विंडोज 7 और | x86_64। और नहीं, Win32 एपीआई का उपयोग एक विकल्प नहीं है (कोई धागा विशिष्ट पॉइंटर्स नहीं, कोई आरडब्ल्यू-लॉक्स, कोई सशर्त चर नहीं आदि) – Artyom

उत्तर

8

खैर, पैक्सडीब्लो ने स्पष्ट रूप से इसे यहां समझाया है। लेकिन इस पुस्तकालय के साथ अपने पिछले अनुभव से, मैं यहां कुछ चीजें जोड़ सकता हूं।

सबसे पहले, मैंने किसी भी समस्या के बिना एमएसवीसी 2008 के साथ पुस्तकालय के कार्यों का सबसेट इस्तेमाल किया था।

दूसरा, मेरे कुछ सहयोगियों ने इसे x86_64 (MSVC2008 और MinGW के साथ) पर जाना है। बीटा और क्यूए परीक्षण के कई चक्रों के बाद उन्हें किसी भी मुद्दे का सामना नहीं करना पड़ा है। हालांकि मैंने इसे स्वयं परीक्षण नहीं किया है, इसलिए इस पर बहुत यकीन नहीं हो सकता है।

तो चीजों के दिखने से, यह उपयोग के लिए उपयुक्त हो सकता है। यहां एकमात्र चेतावनी यह है कि यदि आपको कोई समस्या मिलती है तो आप एक बहुत ही सक्रिय मेलिंग सूची की दया पर होंगे (या शायद आप स्रोत कोड या उसके जैसा कुछ गंदे प्राप्त करना चाहते हैं)।

+0

धन्यवाद, यह वही था जो मैं जानना चाहता था। – Artyom

2

कुछ के लिए नहीं कह सकता है और यह वह नहीं हो सकता है जिसे आप सुनना चाहते हैं, लेकिन यह देखते हुए कि अंतिम रिलीज दिनांक 2006 है, मैं नवीनतम कंपाइलरों में इसका उपयोग करने से बहुत सावधान रहूंगा। यह काम कर सकता है लेकिन यह संभवतः यह आपके लिए जाने जा रहा है। सिग्विन और मिनजीडब्ल्यू में काम करने के बारे में बहुत सी चर्चाएं होती हैं लेकिन एमएसवीसी के लिए बहुमूल्य छोटी, और कुछ भी नहीं मैं MSVC2005 से परे पा सकता हूं।

इसके अलावा, यदि आप सीवीएस अभिलेखागार की जांच करते हैं, तो पिछले कुछ वर्षों में अनमोल कुछ फाइलें अपडेट की गई हैं (अधिकतर दो से पांच साल पहले) हैं। एक साल पहले से कम दिनांकित जोड़े में "टिप्पणियां और कोड शैली में बदलाव" का विवरण है जो मुझे विश्वास दिलाता है कि उत्पाद के मांस में से कोई भी कुछ समय के लिए सक्रिय विकास में नहीं है।

अब शायद मैं गलत हूं और यह सिर्फ एक अविश्वसनीय रूप से अच्छी तरह से लिखित, स्थिर उत्पाद है, लेकिन मेरी आंतरिक प्रकृति का निष्कर्ष निकालने की अधिक संभावना है कि यह रास्ते के रास्ते से गुज़रने वाले अच्छे विचारों के बज़लों में से एक है।

और, मेलिंग सूचियों पर नज़र डालने के बाद, 2010 के पहले पांच महीनों में केवल सात संदेश पोस्ट किए गए हैं (जिनमें से जल्द से जल्द चार महीने के लिए अनुत्तरित नहीं किया गया है) और 200 9 के लिए केवल 5 9। मुझे रंग दें संदिग्ध लेकिन यह एक व्यापक जीवंत समर्थन समुदाय की तरह प्रतीत नहीं होता है।

वहाँ एक पैच होने के लिए 64-बिट Windows (2010 अभिलेखागार में here देखें) लेकिन, फिर से, यह जो फरवरी के बाद से अनुत्तरित हैं समस्याओं के लिए प्रकट होता है लगता है और यह केवल MinGW के लिए समर्थन का उल्लेख है:

... इस पैच (थोड़ा मोटा होना और कुछ अंतिम सफाई की आवश्यकता है और सीआरओएसएस को अनुमति देने के लिए टेस्ट रन मेकफ़ाइल में कुछ एक्सटेंशन) x86_64-pc-mingw32 लक्ष्य के लिए pthread को बनाने में सक्षम बनाता है।

यह नहीं बात की तरह मैं अपने मिशन के लिए महत्वपूर्ण सॉफ्टवेयर के लिए उपयोग किया होता है।

और मुझे पता है कि आपने कहा है कि आपको पहिया का पुन: आविष्कार करने में कोई दिलचस्पी नहीं है, लेकिन आप अधिक बुनियादी प्राइमेटिव्स से बहु-पाठक ताले और हालत चर लागू कर सकते हैं - मेरे पास एक बहु-पाठक योजना भी हल की गई है लेखन भुखमरी की समस्या इस तरह से है कि लगभग मुझे पेटेंट मिला (नहीं कि मैं सॉफ्टवेयर पेटेंट से सहमत हूं लेकिन मेरे नियोक्ता जोर देते हैं कि वे मूल्यवान हैं)।

और अगर केवल पहिया आप अपने आधे स्पोक्स लापता है और बुरी तरह आकार के बाहर आमादा है, तो आप सिर्फ पुनर्विचार करने के लिए :-)

किसी भी मामले में आवश्यकता हो सकती है, विस्टा और Server2k8 condition variables और slim reader/writer locks दोनों की शुरुआत की। Win12k के बाद Thread-local storage आसपास रहा है। मुझे पता है कि अगर आपको अभी भी एक्सपी का समर्थन करने की ज़रूरत है तो मैं मदद नहीं करूंगा लेकिन मैं भविष्य की तलाश कर रहा हूं।

और चूंकि आपने पोर्टेबिलिटी को "विंडोज़-केवल" के रूप में परिभाषित किया है, और वर्तमान में आप जो भी सुविधाएं चाहते हैं, वे मौजूदा संस्करणों में उपलब्ध हैं, मुझे यकीन नहीं है कि मुझे पाथ्रेड के साथ चिपकने का लाभ दिखाई देता है। यदि आप POSIX को पोर्टेबिलिटी चाहते थे, हाँ, लेकिन ऐसा लगता है कि यह मामला नहीं है।

+0

कुछ बिंदु: मैंने अपनी परियोजना को पीएचडीआरएस के एमएसवीसी संस्करण के साथ संकलित किया, यूनिट परीक्षण चलाया और यह काम करता है ...(एमएसवीसी 2008), तो मुझे लगता है कि अच्छी तरह से डीबग किया गया है, समर्थित है और वर्षों से अस्तित्व में है। (ध्यान दें, मैंने इसे संकलित नहीं किया बल्कि एमएसवीसी के लिए प्रीकंपिल्ड बाइनरी का इस्तेमाल किया)। टीएलएस के बारे में - विंडोज टीएलएस एपीआई आपको टीएलएस पॉइंटर के लिए विनाशक प्रदान करने की अनुमति नहीं देता है ... इसे काम करने के लिए आपको काफी जटिल चीजें लिखनी होंगी। इसके अलावा क्रर्टिकल सेक्शन/सशर्त चर होने पर आपको अभी भी पुनर्संरचनात्मक/गैर-पुनरावर्ती ताले के साथ काम करने का प्रबंधन करना होगा। Pthread के साथ यह सरल झंडा का मीटर है। – Artyom

+0

नोट: मुझे pthreads की आवश्यकता है क्योंकि यह पोर्टेबल प्रोजेक्ट है और विंडोज प्लेटफार्मों में से एक है जिसे वह समर्थन देना चाहता है। मुझे यह जानने के लिए कि क्या काम करेगा और क्या नहीं, मुझे पर्थ्रेड लाइब्रेरी की सीमाएं जाननी होंगी। – Artyom

+0

मैंने स्पष्ट रूप से आपकी पोर्टेबिलिटी आवश्यकता को गलत समझा - इसमें गैर-विंडोज प्लेटफार्म शामिल नहीं थे। मेरा सुझाव यह है कि आपको उत्पाद बोर्ड के लिए संदेश बोर्डों पर पोस्ट करके अधिक लक्षित प्रतिक्रिया मिलेगी, क्योंकि आपको यहां दो दिनों के लिए बहुत कम प्रतिक्रिया मिली है, और हम आम तौर पर आपको बहुत ही कमजोर और राय देते हैं, आपको तैयार करने के लिए तैयार हैं पता है कि हम बहुत कम संकेत के साथ क्या सोचते हैं :-) लेकिन, अपने बोर्ड पर गतिविधि को देखते हुए, आपको थोड़ा इंतजार करना पड़ सकता है। यदि आप इसे जा रहे हैं, तो आप वहां से अधिकतर तरीके से हैं। मैं अभी भी समर्थन के बारे में चिंतित हूं लेकिन यह आपकी स्थिति पर निर्भर करता है। – paxdiablo

0

आश्चर्यचकित है कि किसी ने भी इंटेल के थ्रेड बिल्डिंग ब्लॉक का सुझाव नहीं दिया है। वे बहुत सक्रिय हैं और वर्चुअल सब कुछ का समर्थन करते हैं, नवीनतम रिलीज दो सप्ताह पहले से कम होने के साथ, और सी ++ 0x फीचर्स यदि आप एक अनुपालन कंपाइलर का उपयोग करते हैं।

http://software.intel.com/en-us/intel-tbb/#sysreq

+3

क्या यह खुला स्रोत है? AFAIK नहीं। तो मुझे दिलचस्पी नहीं है। 2 मुझे अन्य पुस्तकालयों में दिलचस्पी नहीं है। मुझे बजाय pthreads-win32 की सीमाओं को समझने की आवश्यकता है – Artyom

संबंधित मुद्दे