मैंने इंटेल मैनुअल को पढ़ा और पाया कि निर्देशों के लिए लॉक उपसर्ग है, जो प्रोसेसर को उसी स्मृति स्थान पर लिखने से रोक सकता है। मैं इसके बारे में बहुत उत्साहित हूं। मुझे लगता है कि इसे हार्डवेयर म्यूटेक्स के रूप में इस्तेमाल किया जा सकता है। तो मैंने शॉट करने के लिए कोड का एक टुकड़ा लिखा था। परिणाम काफी निराशाजनक है। लॉक एमओवी या एलआईए निर्देशों का समर्थन नहीं करता है। मैनुअल का कहना है कि एलओके केवल एडीडी, एडीसी, और, बीटीसी, बीटीआर, बीटीएस, सीएमपीएक्सएचजी, सीएमपीएक्ससी 8 बी, डीईसी, आईएनसी, एनईजी, नॉट, या, एसबीबी, एसयूबी, एक्सओआर, एक्सएडीडी और एक्ससीएचजी का समर्थन करता है। और क्या है, यदि LOCK उपसर्ग का उपयोग इन निर्देशों में से किसी एक के साथ किया जाता है और स्रोत ऑपरेंड एक मेमोरी ऑपरेंड है, तो एक अपरिभाषित ओपोड अपवाद (#UD) उत्पन्न किया जा सकता है।इंटेल निर्देश के LOCK उपसर्ग। मुद्दा क्या है?
मुझे आश्चर्य है कि इतनी सारी सीमाएं क्यों हैं, इतने सारे प्रतिबंध LOCK को बेकार लगते हैं। मैं इसका उपयोग सामान्य लेखन ऑपरेशन की गारंटी के लिए नहीं कर सकता, जिसमें गंदे डेटा या समांतरता के कारण अन्य समस्याएं नहीं हैं।
उदा। मैंने सी + पी में कोड ++ (* पी) लिखा है जो एक साझा स्मृति में सूचक है।
movl 28(%esp), %eax
movl (%eax), %eax
leal 1(%eax), %edx
movl 28(%esp), %eax
movl %edx, (%eax)
मैंने पहले "movl" और "लील" जोड़ा "ताला", लेकिन प्रोसेसर शिकायत "अवैध निर्देश": की तरह इसी विधानसभा है। :-(मैं लिखने के संचालन धारावाहिक बनाने के लिए एक ही रास्ता लगता है, सही सॉफ्टवेयर म्युटेक्स उपयोग करने के लिए है?
http://en.wikipedia.org/wiki/Fetch-and-add – Mysticial
http://en.wikipedia.org/wiki/compare-and-swap – Mysticial
एक गठबंधन पते पर 'movl' हमेशा परमाणु है , तो लॉक बिल्कुल कोई फर्क नहीं पड़ता। – hirschhornsalz