c - Why does OPENSSL_cleanse look so complex and thread-unsafe? -


यह OpenSSL 1.0.1i में OPENSSL_cleanse का कार्यान्वयन है

  अहस्ताक्षरित चार cleanse_ctr = 0 ; शून्य OPENSSL_cleanse शून्य (शून्य * पीटीआर, आकार_टी लेन) {अहस्ताक्षरित चार * p = ptr; Size_t लूप = लेन, सीटीआर = शुद्ध_एक्ट्रर; जबकि (लूप -) {* (पी ++) = (अहस्ताक्षरित चार) सीटीआर; सीटीआर + = (17 + ((आकार_टी) पी & amp 0xF)); } P = memchr (ptr, (अहस्ताक्षरित चार) सीटीआर, लेन); अगर (पी) सीटीआर + = (63 + (आकार_टी) पी); Cleanse_ctr = (अहस्ताक्षरित चार) सीटीआर; }  

यह जटिल और धागा-असुरक्षित (वैश्विक वैरिएबल cleanse_ctr को पढ़ने और लिखकर) लगता है। क्या कोई इस कार्यान्वयन के बारे में कुछ समझ सकता है? क्या किसी उपयोगकर्ता को इसमें संभावित डेटा दौड़ के बारे में चिंता करने की आवश्यकता है?

इसमें डेटा दौड़ है कोड है, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि चर का बिंदु केवल कचरा डेटा को अलग करना है जिसके साथ स्मृति का एक टुकड़ा भरना है। दूसरे शब्दों में, यह वास्तव में कभी भी कोई फर्क नहीं पड़ता कि किसी भी दिए गए धागा उस वैरिएबल से क्या पढ़ता है। उपयोगकर्ताओं को इसके बारे में चिंतित होने की जरूरत नहीं है वास्तव में, डेटा दौड़ भी कार्य को अधिक प्रभावी बना सकती है।


Comments

Popular posts from this blog

c# - SignalR: "Protocol error: Unknown transport." when navigating to hub -

c# - WPF Expander overlay used in ItemsControl -

class - Kivy: how to instantiate a dynamic classes in python -