इस थोड़े संभव है, जिस पर आप हैं मंच पर निर्भर करता है, लेकिन पूरी तरह से किसी भी पोर्टेबल और सामान्य तरीके से नहीं ...
मैक ओएस एक्स एक सीधा और दस्तावेज दृष्टिकोण के साथ केवल एक ही प्रतीत हो रहा है, उनके pthread.h फ़ाइल के अनुसार:
/* returns non-zero if the current thread is the main thread */
int pthread_main_np(void);
मैंने यह भी पाया FreeBSD एक pthread_np.h हैडर कि pthread_main_np() को परिभाषित करता है है, तो इस FreeBSD पर भी (कम से कम 8.1) काम करना चाहिए कि, और OpenBSD (4.8 कम से कम) pthread_main_np() को pthread.h में भी परिभाषित किया गया है। ध्यान दें कि _np स्पष्ट रूप से गैर पोर्टेबल के लिए खड़ा है!
अन्यथा, दिमाग में आने वाला एकमात्र "सामान्य" दृष्टिकोण वर्तमान थ्रेड के टीआईडी की प्रक्रिया की पीआईडी की तुलना कर रहा है, यदि वे मेल खाते हैं, तो वह धागा मुख्य है। यह सभी प्लेटफार्मों पर काम नहीं करता है, यह इस बात पर निर्भर करता है कि आप वास्तव में एक टीआईडी प्राप्त कर सकते हैं (उदाहरण के लिए आप ओपनबीएसडी में नहीं हो सकते हैं), और यदि आप करते हैं, तो यदि इसका पीआईडी से कोई संबंध है या यदि थ्रेडिंग उपप्रणाली का अपना लेखांकन होता है जो आवश्यक रूप से संबंधित नहीं है।
मैंने यह भी पाया कि कुछ प्लेटफार्म मुख्य धागे के लिए टीआईडी के रूप में स्थिर मान वापस देते हैं, ताकि आप केवल उन लोगों की जांच कर सकें।
मैं देख लिया है प्लेटफार्मों का एक संक्षिप्त सारांश:
- लिनक्स: यहाँ संभव, syscall (SYS_gettid) == getpid() आप क्या चाहते हैं
- FreeBSD है:, यहाँ संभव नहीं thr_self यहां संभव नहीं है, वहाँ एक टीआईडी
- NetBSD प्राप्त करने के लिए कोई रास्ता नहीं है:() यादृच्छिक लगता है और संबंध के बिना getpid करने के लिए()
- OpenBSD यहाँसंभव, _lwp_self() हमेशा मीटर के लिए 1 रिटर्न ऐन धागा
- सोलारिस: संभव यहाँ, pthread_self() हमेशा मुख्य थ्रेड
के लिए 1 रिटर्न तो बुनियादी तौर पर आप मैक ओएस एक्स, FreeBSD और OpenBSD पर सीधे यह करने के लिए सक्षम होना चाहिए।
आप लिनक्स पर टीआईडी == पीआईडी दृष्टिकोण का उपयोग कर सकते हैं।
आप NetBSD और सोलारिस टीआईडी == 1 दृष्टिकोण का उपयोग कर सकते हैं।
मुझे आशा है कि इस मदद करता है, एक अच्छा दिन है!
आप अन्य मानव पठनीय नाम कैसे प्राप्त करूं? – Potatoswatter
अधिक विशेष रूप से, वह पैटर्न क्या है जिसके लिए 'मुख्य' अनुरूप होना विफल रहता है? – Potatoswatter
सिस्टम में अधिकांश धागे केवल कुछ ही तरीकों से शुरू किए गए हैं। वहां एक सामान्य कोड है जो आभासी std :: स्ट्रिंग नाम() फ़ंक्शन पर भरोसा कर सकता है। हालांकि मुख्य धागा अलग है। –