निम्नलिखित कोड में एक संभावित डेडलॉक है, लेकिन यह आवश्यक प्रतीत होता है: एक कंटेनर को दूसरे से सुरक्षित रूप से कॉपी करने के लिए, दोनों कंटेनरों को किसी अन्य थ्रेड में होने वाले परिवर्तनों को रोकने के लिए लॉक किया जाना चाहिए।दो म्यूटेक्स पर लॉक प्राप्त करें और डेडलॉक से बचें
void foo::copy(const foo & rhs)
{
pMutex->lock();
rhs.pMutex->lock();
// do copy
}
फू में एक एसटीएल कंटेनर है और "प्रतिलिपि" अनिवार्य रूप से std :: copy का उपयोग करने के होते हैं। मैं डेडलॉक पेश किए बिना दोनों म्यूटेक्स को कैसे लॉक करूं?
भी आरएचएस बनाम इस के पते के रूप में सरल कुछ काम करेगा। हमेशा पहले निचले पते के साथ एक को लॉक करें। –
क्लोन केवल तभी काम करेगा जब यह प्रतिलिपि नहीं बना रहा था, और मुझे नहीं लगता कि निहित साझाकरण काम करेगा, लेकिन मैं एक नज़र डालेगा। दिलचस्प दृष्टिकोण केली। मुझे कोई दोष नहीं दिख रहा है। – pomeroy