मैं एक दो धागे, जिनमें एक तंग पाश में काम करता है, और अन्य जो कभी कभी पहले के साथ एक समन्वयन करने की जरूरत है:pthreads: धागा भुखमरी की वजह से जल्दी फिर से ताला लगा
// thread 1
while(1)
{
lock(work);
// perform work
unlock(work);
}
// thread 2
while(1)
{
// unrelated work that takes a while
lock(work);
// synchronizing step
unlock(work);
}
मेरे इरादे क्या यह थ्रेड 2 लॉक ले कर प्रभावी ढंग से थ्रेड 1 रोक सकता है और आवश्यक सिंक्रनाइज़ेशन कर सकता है। थ्रेड 1 अनलॉक करके, रोकें, और थ्रेड 2 लॉक पर इंतजार नहीं कर रहा है, फिर से लॉक और काम पर लौट सकता है।
समस्या मैं सामना करना पड़ा है कि mutexes निष्पक्ष नहीं हैं, इसलिए जल्दी से 1 थ्रेड फिर से ताले म्युटेक्स और धागा 2. मैं pthread_yield
का उपयोग करने का प्रयास किया starves, और अब तक यह ठीक से चलाने के लिए लगता है, लेकिन मैं नहीं कर रहा हूँ है सुनिश्चित करें कि यह सभी प्रणालियों/कोरों की संख्या के लिए काम करेगा। क्या गारंटी देने का कोई तरीका है कि थ्रेड 1 हमेशा बहु-कोर सिस्टम पर थ्रेड 2 तक पहुंच जाएगा?
इस सिंक्रनाइज़ेशन प्रक्रिया को संभालने का सबसे प्रभावी तरीका क्या है?
क्या आप अपने प्रश्न में वर्णन किया है, निष्पक्षता से कोई संबंध नहीं है। – Michael
यह प्रश्न [* मेला महत्वपूर्ण अनुभाग (लिनक्स) *] (http://stackoverflow.com/q/6449732/134633) के समान है। – caf