गो का बफर किया गया चैनल अनिवार्य रूप से एक थ्रेड-सुरक्षित फीफो कतार है। (Is it possible to use Go's buffered channel as a thread-safe queue? देखें)क्या गो बफर्ड चैनल लॉकलेस है?
मुझे आश्चर्य है कि यह कैसे कार्यान्वित किया गया है। क्या यह Is there such a thing as a lockless queue for multiple read or write threads? में वर्णित की तरह लॉक-फ्री है?
जाओ के src निर्देशिका (grep -r Lock .|grep chan
) में greping निम्नलिखित देता है उत्पादन:
./pkg/runtime/chan.c: Lock;
./pkg/runtime/chan_test.go: m.Lock()
./pkg/runtime/chan_test.go: m.Lock() // wait
./pkg/sync/cond.go: L Locker // held while observing or changing the condition
हालांकि मेरे मशीन (MacOS, इंटेल x86_64) पर ताला लगा होने के लिए नहीं है। क्या यह सत्यापित करने के लिए कोई आधिकारिक संसाधन है?
धन्यवाद! इस बारे में कोई विचार है कि इसे लॉक-फ्री के रूप में क्यों लागू नहीं किया गया है? –
"लॉकफ्री" बेहतर प्रदर्शन का संकेत नहीं देता है। ताले के बारे में तर्क करना भी आसान है। उच्च विवाद होने पर लॉक विधि शायद तेज़ है। –
धन्यवाद, @ स्टीफन-वेनबर्ग। यह अब और अधिक समझ में आता है। –