2010-11-08 12 views
8

मैंने पढ़ा है कि आईओ भाषा में Futures है जो स्वचालित रूप से डेडलॉक का पता लगा सकता है। मैं इसके बारे में कुछ भी नहीं जानता और कुछ वाक्यविन्यास देखा है। आईओ भाषा इस के साथ deadlocks कैसे पता लगाता है?आईओ भाषा स्वचालित रूप से डेडलॉक का पता कैसे लगाती है?

+0

यह कैसे रोक समस्या से संबंधित है? डेडलॉक पहचान नहीं है कि यह मूल रूप से देख सकता है जब यह रुक जाएगा? या यह एक सबसेट है जिसे हमेशा पहचाना जा सकता है? – Sebastian

उत्तर

7

आईओ एक अपवाद फेंकता है जब यह एक डेडलॉक का सामना करता है।

रेफरी: post से मुझे lang.lightweight पर विश्वास है। नीचे चिपकाया गया संदेश:

आईओ में एसिंक्रोनस संदेश और वायदा के रूप में निरंतरता है। उदाहरण:

aFuture = obj @foo 

// the @ means "perform message foo asynchronously" 
// that is, in a light weight thread owned by obj 
// The aFuture's value ivar is set with the result 

result = aFuture value 

// This causes the current light weight thread to pause 
// until the aFuture's vale is set. 
// So this is effectively a continuation. 
// another option is: 

obj @(foo) sendResultTo(target, "foobar") 

// which is more like the callcc style 

उपयोग की इस शैली के बारे में दिलचस्प बात यह है कि कोई भी यह मुश्किल समझने के लिए खोजने के लिए लगता है। इसके अलावा, आईओ स्वचालित डेडलॉक पहचान करने के लिए वायदा का उपयोग करता है। जब एक डेडलॉक होता है, तो यह अनुमति देने के बजाय अपवाद उठाता है।

एनबी। उपरोक्त पोस्ट 2003 से तारीखें हैं इसलिए कुछ बदलाव हुए हैं। नवीनतम जानकारी के लिए कृपया नवीनतम ऑनलाइन Concurrency दस्तावेज़ीकरण देखें।


अद्यतन - और online documentation से यह कहता है:

ऑटो डेडलॉक डिटेक्शन

वायदा का उपयोग करने का एक फायदा यह है कि जब एक भविष्य प्रतीक्षा की आवश्यकता है, यह जाँच करेगा है यह देखने के लिए कि क्या परिणाम की प्रतीक्षा करने के लिए रुकने से डेडलॉक होगा और यदि ऐसा है, तो डेडलॉक से बचें और अपवाद उठाएं। यह कनेक्ट किए गए वायदा की सूची को पार करके इस चेक को निष्पादित करता है।

+0

बहुत बढ़िया, बस कमाल है। –

7

प्रत्येक भविष्य जानता है कि यह किस अभिनेता पर इंतजार कर रहा है और प्रत्येक अभिनेता जानता है कि यह किस भविष्य में इंतजार कर रहा है (यदि कोई है) तो आईओ बस इस श्रृंखला को चलता है यह देखने के लिए कि वर्तमान अभिनेता इसके अंदर है या नहीं। यदि ऐसा है, तो एक डेडलॉक होगा। यदि नहीं, तो नहीं है।