अच्छा, मुझे लगता है (और वहां कई अध्ययन हैं) कि वर्तमान एसटीएम लॉक-फ्री और म्यूटेक्स-आधारित कोड से तेज़ नहीं है। यह स्पष्ट है: एसटीएम को ऑनलाइन डेटा विवाद जांच की आवश्यकता है। हालांकि, शुद्ध सॉफ़्टवेयर में इस तरह के संघर्ष की जांच के लिए बहुत अधिक समय के ऊपर की आवश्यकता होती है। वर्तमान में, केवल सूर्य का ROCK processor हार्डवेयर द्वारा एसटीएम (एसटीएम के साथ सर्वश्रेष्ठ प्रयास एचटीएम) के सीमित रूप का समर्थन करता है। वर्तमान में कोई x86 CPUs हार्डवेयर में टीएम का समर्थन नहीं करता है। संक्षेप में, एसटीएम बस धीमा है।
मेरी राय में, आप बस एक समवर्ती हैश तालिका का उपयोग करना बेहतर होगा। उदाहरण के लिए, आप इंटेल टीबीबी में concurrent_hash_map
पा सकते हैं। TBB Manual का लिंक यहां दिया गया है। ओह, लेकिन यह सी ++ है, सी नहीं। लेकिन, मुझे विश्वास है कि आप कर सकते हैं (हालांकि यह महत्वपूर्ण काम ले सकता है) सी ++ - इस तरह की हैश टेबल को सी कोड में अनुवादित करें। इंटेल टीबीबी खुला स्रोत है।
इसके अलावा, मुझे लगता है कि इस तरह के अत्यधिक समवर्ती (आमतौर पर लॉक-फ्री के रूप में लागू) डेटा संरचनाएं हमेशा उपयोगी नहीं होती हैं। कुछ वर्कलोड पैटर्न में, ऐसे डेटा संरचनाओं का उपयोग करना अच्छा नहीं है। यह सुनिश्चित करने के लिए, मैं आपको हैश टेबल के दो संस्करणों के लिए एक छोटा माइक्रो-बेंचमार्क लिखने की सलाह देता हूं: (1) लॉक-फ्री और (2) लॉक-आधारित। साथ ही, कृपया ध्यान रखें कि ऐसे माइक्रो-बेंचमार्क के लिए वर्कलोड पैटर्न वास्तविक के करीब होना चाहिए। एक उदाहरण here में पाया जा सकता है।
क्या आपका मतलब एसटीएम के बजाय एसटीएल था? –
मुझे लगता है कि उसका मतलब है एसटीएम - सॉफ्टवेयर ट्रांजैक्शनल मेमोरी - चूंकि वह स्नैपशॉट्स और ऑटो-रीट्री जैसी चीज़ों की तलाश में है: http://en.wikipedia.org/wiki/Software_transactional_memory लेकिन उसे शायद यह स्पष्ट करना चाहिए, क्योंकि एसटीएम एक नहीं है बहुत प्रसिद्ध क्षेत्र। –
विवरण को सही किया गया। माइकल सही है। – viraptor