ओएस तक रोक चर मान सही लगता है, और धागे शान से समाप्त pthreadspthreads, मुझे कैसे पता चलेगा कि प्रक्रिया के अंदर एक और धागा इंतजार नहीं कर रहा है?
मैं दो कार्यकर्ता धागे कि हमेशा के लिए चला के साथ काम, लिनक्स है। व्यस्त होने की बजाय दोनों धागे pthread_cond_wait को कॉल करते हैं जब तक एक संकेत एक नए कार्य के लिए सूचित नहीं करता है। प्रणाली अच्छी तरह से काम करता है।
से अनुरोध है कि वह "जानकारी" धागा तैयार करे जो कुछ डीबगिंग जानकारी प्रिंट करे। जानकारी थ्रेड हर 30 सेकंड में जानकारी को पढ़ने और प्रिंट करने का प्रयास करेगा। इस जानकारी का हिस्सा, मैं प्रत्येक कार्यकर्ता धागे का राज्य बनना चाहता हूं। क्या यह पता लगाना संभव है कि "pthread_cond_wait" में थ्रेड अवरुद्ध है या नहीं? यदि धागा इंतजार कर रहा है pthread_cond_wait तो राज्य == प्रतीक्षा कर रहा है राज्य == चल रहा है।
while ((sharedvaluffer == 0) && (doneflag == 0)) {
pthread_cond_wait (&taks_added, &buffer);
}
बेशक हम इसे और अधिक कोड कर सकते हैं। हम उपरोक्त स्निपेट को वैश्विक वैरिएबल में जोड़ सकते हैं जो अंक को लॉक के रूप में चिह्नित करता है। कोड
while ((sharedvaluffer == 0) && (doneflag == 0)) {
lock;
i_am_waiting = truel
unlock
pthread_cond_wait (&taks_added, &buffer);
}
प्रश्न यह है कि यदि कोई आसान स्केलेबल तरीका है। वेटिंग धागे के ढेर है
Thread 6 (Thread 0x40800940 (LWP 20732)):
#0 0x00002ba4567a9326 in [email protected]@GLIBC_2.3.2()
#1 0x00000000007ce2ed in worker(void*)()
#2 0x00002ba4567a5193 in start_thread() from /lib64/libpthread.so.0
#3 0x00002ba458a82f0d in clone() from /lib64/libc.so.6
जो काम नहीं करता है अगर कर्मचारी कुछ म्यूटेक्स लॉक कर रहा है (यानी साझा म्यूटेक्स मामले में) – cateof
क्यों नहीं? प्रत्येक धागे की अपनी आईडी होती है। एक सुलभ 'pthread_t current_owner' रखें और जब भी कार्यकर्ता थ्रेड म्यूटेक्स प्राप्त करता है तो उसे अपडेट करें। आपकी जानकारी धागा तब इस चर को प्रत्येक कार्यकर्ता धागे की आईडी से तुलना करता है। ध्यान रखें कि pthread_t लिनक्स पर 'int' है, लेकिन आम तौर पर अन्य प्रणालियों में एक संरचना है, इस प्रकार आप परमाणुता पर भरोसा नहीं कर सकते हैं, जिसके लिए अतिरिक्त लॉक की आवश्यकता होती है। – jweyrich