2013-11-01 3 views
8

obj in a_list थ्रेड-सुरक्षित है जबकि a_list को एक अलग थ्रेड में संशोधित किया जा सकता है?क्या पाइथन की "इन" भाषा सूचियों के लिए थ्रेड-सुरक्षित है?

Here's a comprehensive yet non-exhaustive list of exampleslist संचालन और चाहे वे थ्रेड सुरक्षित हैं या नहीं, हालांकि मुझे in भाषा निर्माण के लिए कोई संदर्भ नहीं मिला।

पायथन कार्यान्वयन के मामले में, मैं सीपीथन का उपयोग करता हूं, लेकिन अन्य कार्यान्वयन का जवाब समुदाय के लिए भी उपयोगी होगा।

+6

ध्यान दें कि थ्रेड सुरक्षा के बारे में कोई भी विवरण कार्यान्वयन विशिष्ट है (और शायद संस्करण-विशिष्ट भी)। यह लॉक लेने और रिलीज़ करने के अलावा कुछ भी धागा सुरक्षित नहीं मानना ​​संभव है। – delnan

उत्तर

15

मुझे लगता है कि आप यहां सीपीथॉन का उपयोग कर रहे हैं।

परंतु कोई कस्टम __contains__ या __iter__ हुक वापस में निहित के खिलाफ मूल्यों आप परीक्षण अजगर या में छोड़ने सूची अजगर कोड में लागू कस्टम __eq__ हुक का उपयोग करें, in ऑपरेटर पूरी तरह से सी में नियंत्रित किया जा सकता है, और सिर्फ एक ऑपोड है।

यह ऑपरेशन पूरी तरह से थ्रेड-सुरक्षित बनाता है; पाइथन थ्रेड केवल ऑपकोड के बीच स्विच करते हैं; जीआईएल (ग्लोबल दुभाषिया ताला) आमतौर पर केवल ऑपोड के बीच अनलॉक करता है।

यह कहा गया है कि, यदि आप एक कस्टम सी प्रकार पर in का उपयोग करते हैं जो जीआईएल को अनलॉक करता है तो परीक्षण की रोकथाम थ्रेड-सुरक्षित नहीं होगी।

दूसरे शब्दों में: in बाईटकोड परीक्षण बंद कर दिया जाता है, लेकिन ऑपरेटर अजगर कोड कॉल करने के लिए की जरूरत है (__contains__ के माध्यम से __iter__ साथ पुनरावृत्ति, कोई __contains__ कार्यान्वयन उपलब्ध है, या मूल्यों __eq__ अजगर में लागू हुक के खिलाफ परीक्षण कर रहे हैं जब) , तो ऑपरेशन थ्रेड सुरक्षित नहीं है।

अन्य पायथन कार्यान्वयन के लिए, थ्रेडिंग कैसे संभाला जाता है व्यापक रूप से भिन्न हो सकता है। निश्चित रूप से, ज्योथन और आयरनपीथन में कोई जीआईएल नहीं है, और आपको लगता है कि ऑपरेशन थ्रेड सुरक्षित नहीं है।

+0

'/ पायथन/सीपीथन/जी' – delnan

संबंधित मुद्दे