2013-01-09 34 views
16

pthread_mutex_timedlock documentation कहता है कि abs_timeoutCLOCK_REALTIME लेता है। हालांकि, हम सभी जानते हैं कि यह एक विशिष्ट अवधि (सिस्टम समय समायोजन के कारण) के लिए अनुचित है।CLOCK_MONOTONIC और pthread_mutex_timedlock/pthread_cond_timedwait

CLOCK_MONOTONIC पर पोर्टेबल लॉक टाइमआउट बनाने का कोई तरीका है जो पोर्टेबल है? वही pthread_cond_timedwait के साथ चला जाता है।

+0

यह अनुचित नहीं है। आपको बस अपने आवेदन के लोकेल टाइमज़ोन को यूटीसी में सेट करना होगा। –

+4

@ महमूद अल-कुड्सी संख्या जो आपकी वास्तविक समय घड़ी को बदलने से नहीं रोकती है। –

+0

आप एक घड़ी वॉचर थ्रेड का उपयोग कर सकते हैं जो सभी पंजीकृत वातानुकूलित चरों को प्रसारित करता है, घड़ी को पीछे की ओर कूदना चाहिए। –

उत्तर

17

प्रलेखन और pthread.h पर ध्यान देने के बाद, मुझे pthread_mutex_timedlockCLOCK_MONOTONIC का उपयोग करने का कोई तरीका नहीं मिल रहा है, इसलिए मुझे लगता है कि यह (वर्तमान में) संभव नहीं है। pthread_cond_timedwait लिए, तथापि, आप कोड इस तरह उपयोग कर सकते हैं:

pthread_condattr_t attr; 
pthread_cond_t cond; 
/* ... */ 
pthread_condattr_init(&attr); 
pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); 
pthread_cond_init(&cond, &attr); 

मैं त्रुटि कोड स्पष्टता के लिए जाँच हटा दिया है, लेकिन निश्चित रूप से आपको लगता है कि क्या करना चाहिए।

मुझे लगता है कि CLOCK_REALTIME का उपयोग किया जाता है क्योंकि यह हमेशा उपलब्ध होता है जबकि सिद्धांत CLOCK_MONOTONIC वैकल्पिक है। साथ ही, मुझे आश्चर्य है कि पूर्ण टाइमआउट सेट करना सिग्नल और इसी तरह सिस्टम कॉल में बाधा डालने के बाद पुनर्प्राप्त करना आसान बनाता है।

हालांकि, यह काफी असंगत प्रतीत होता है कि घड़ी कुछ मामलों में सेट की जा सकती है, न कि अन्य - वास्तव में pthread_mutexattr_setclock() होना चाहिए, लेकिन वहां कोई भी प्रतीत नहीं होता है। मुझे लगता है कि आपको उम्मीद है कि कोई घड़ी सेट नहीं करेगा!

+3

यह लिनक्स पर अच्छा है। 'pthread_condattr_setclock' ओएस एक्स पर उपलब्ध नहीं है और मैं ओएस एक्स – andrewrk

+0

पर काम करने वाले समाधान को खोजने में सक्षम नहीं हूं, ऐसा लगता है कि अन्य लोगों ने भी इसमें भाग लिया है: https://github.com/nanomsg/nanomsg/issues/ 10 – Cartroo

+0

मैं कुछ प्रयोग करने जा रहा हूं, लेकिन मैं यहां एक समाधान पर ठोकर खा सकता हूं: http://stackoverflow.com/questions/11338899/are-there-any-well-behaved-posix-interval-timers/ 31174803 # 31174803 – andrewrk