मैं एक सी लाइब्रेरी लिख रहा हूं जिसे प्रारंभिक समय के दौरान फोर्क() की आवश्यकता है। इसलिए, मैं जोर देना चाहता हूं() कि एप्लिकेशन कोड (जो मेरे नियंत्रण के बाहर है) मेरे पुस्तकालय प्रारंभिक कोड को एक थ्रेडेड संदर्भ से कॉल करता है (अच्छी तरह से ज्ञात "threads and fork don't mix" समस्या से बचने के लिए)। एक बार मेरी लाइब्रेरी शुरू हो जाने के बाद, यह थ्रेड सुरक्षित है (और उम्मीद है कि एप्लिकेशन स्तर कोड थ्रेड बना सकता है)। मैं केवल pthreads का समर्थन करने के लिए चिंतित हूँ।pthreads: कोड को कैसे जोर देना एक थ्रेड किए गए संदर्भ में चलाया जाता है
pthreads का उपयोग कर वर्तमान प्रक्रिया स्थान में धागे की संख्या को गिनना असंभव लगता है। दरअसल, यहां तक कि googletest केवल मैक ओएस और क्यूएनएक्स पर GetThreadCount() लागू करता है।
, यह देखते हुए कि मैं धागे गिनती नहीं कर सकते हैं यह किसी भी तरह कि मैं बजाय एक ही लड़ी संदर्भ पर जोर कर सकते हैं हो सकता है?
स्पष्टीकरण: यदि संभव हो, तो मैं "/ proc" (गैर-पोर्टेबल), अतिरिक्त लाइब्रेरी निर्भरता (libproc) और LD_PRELOAD-style pthread_create wrappers का उपयोग करने से बचना चाहूंगा।
स्पष्टीकरण # 2: मेरे मामले कई प्रक्रियाओं का उपयोग कर में आवश्यक है के रूप में मेरे पुस्तकालय में श्रमिकों अपेक्षाकृत भारी वजन (वेबकिट प्रयोग करके) और क्रैश हो सकता है कर रहे हैं। हालांकि, मैं मूल प्रक्रिया कार्यकर्ता दुर्घटनाओं से बचने के लिए चाहता हूं।
मैं अपने पोर्टेबल नहीं पता है, लेकिन इसकी एक शुरुआत: लिनक्स पर, वहाँ है [/ proc/self/स्टेट] (http: //www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html)। – ArjunShankar
कैसे "अगर (pthread_self()! = NULL) ..."? क्षमा करें, यह उपयोगी नहीं है अगर आप यह देखना चाहते हैं कि पहले के मुकाबले अन्य धागे नहीं हैं। माफ़ कीजिये। सोचते रहेंगे ... –
आगे की जांच पर, मुझे यकीन नहीं है कि इस समस्या को हल करने का कोई आसान तरीका है। शायद बस "इसे स्पष्ट रूप से दस्तावेज करें और उपयोगकर्ता को परेशान होने दें यदि वे दस्तावेज़ नहीं पढ़ रहे हैं?" पोर्टेबिलिटी कारण के लिए –