हम संक्षिप्त भाषा डिटेक्टर 2 के जावा रैपर कार्यान्वयन का उपयोग कर रहे हैं।

क्या पता लगा () फ़ंक्शन थ्रेड-सुरक्षित?

मेरी समझ से, यह इस लाइब्रेरी फ़ंक्शन

0
Daniel 8 अप्रैल 2020, 09:09

1 उत्तर

सबसे बढ़िया उत्तर

नहीं, यह थ्रेड सुरक्षित नहीं है यदि मूल कोड CLD2_DYNAMIC_MODE सेट के साथ संकलित किया गया था, जिसे आप isDataDynamic() फ़ंक्शन का उपयोग करके परीक्षण कर सकते हैं।

नेटिव फंक्शन स्टैटिक क्लास वेरिएबल kScoringtables में हेरफेर करता है। यदि CLD2_DYNAMIC_MODE को संकलन में परिभाषित किया गया है, तो इस चर को नल तालिकाओं (NULL_TABLES) के एक सेट में आरंभीकृत किया जाता है और बाद में गतिशील डेटा के साथ लोड किया जा सकता है, या अनलोड किया जा सकता है, संभावित रूप से अन्य थ्रेड्स द्वारा।

kScoringtables.quadgram_obj के लिए गैर-शून्य होना संभव होगा पंक्ति १७६२ पर अशक्त जाँच और फिर kScoringtables पते को पंक्ति १७७७ पर क्रॉस-थ्रेड ScoringContext ऑब्जेक्ट में जोड़ने से पहले बदल दिया गया। इस मामले में, गलत सूचक होगा लाइन 1785 पर ApplyHints को पास किया गया, जिससे संभावित रूप से लाइन 1606 पर बुरी चीजें हो सकती हैं।

यह एक बहुत ही दुर्लभ दौड़ की स्थिति होगी, लेकिन फिर भी संभव है, और उसी कारण से थ्रेड सुरक्षित नहीं है क्योंकि मानक "आलसी गेटर" थ्रेड सुरक्षित नहीं है।

इस थ्रेड को सुरक्षित बनाने के लिए, आपको या तो यह परीक्षण करना होगा कि isDataDynamic() गलत रिटर्न देता है, या यह सुनिश्चित करें कि loadDataFromFile, loadDataFromRawAddress, और unloadData फ़ंक्शन को एक द्वारा कॉल नहीं किया जा सकता है। जब आप इस विधि को क्रियान्वित कर रहे हों तो अलग-अलग थ्रेड (या कम से कम जब तक आप पिछली पंक्ति 1777...)

0
Daniel Widdis 18 अप्रैल 2020, 00:20