नोट: कृपया इस उत्तर को सही के रूप में चिह्नित करें यदि आप वास्तव में इस दृष्टिकोण का परीक्षण करते हैं।
अपने प्रश्न के बारे में है कि क्या नीचे सुरक्षित रूप से डाला जा struct और ताला मुक्त कंटेनर से हटा:
struct person
{
string name;
uint32_t age;
}
किसी भी लम्बाई के बहु बाइट दृश्यों को सुरक्षित रूप से डाला जा सकता है/लॉक मुक्त कंटेनर से हटा दिया है, तो आप एक का उपयोग अनावश्यक एन्कोडिंग। आइए मान लें कि हमारे पास पहले से ही 4 बाइट्स (32 बिट्स) में हेरफेर करने के लिए परमाणु निर्देश हैं। उस मामले में, हम तो जैसे uint32_t age
क्षेत्र सांकेतिक शब्दों में बदलना कर सकते हैं:
struct age_t
{
uint32_t age_low;
uint32_t age_high;
}
क्षेत्र age_low
भंडार कम बिट्स (उदाहरण के लिए, कम 16 बिट) 32-बिट uint32_t age
की। फ़ील्ड age_high
शेष उच्च बिट्स स्टोर करता है।सैद्धांतिक रूप:
struct age_t
{
uint16_t age_low;
uint16_t id_low;
uint16_t age_high;
uint16_t id_high;
}
क्षेत्रों id_low
और id_high
एक आईडी लेखक की पहचान होनी चाहिए।
एक पढ़ा दो परमाणु 32-बिट पढ़ने के रूप में लागू किया जाता है, और सफल होता है यदि सभी id_
भागों एक दूसरे के बराबर हैं। यदि यह विफल रहता है, तो पढ़ने के लिए ऑपरेशन को पुनरारंभ करना होगा।
एक लेखन दो परमाणु 32-बिट लिखने के रूप में लागू किया जाता है, और उसके बाद पूरे age_t
मान के पढ़ने के बाद किया जाता है। लेखन सफल होता है यदि: पिछले वाक्य में वर्णित पढ़ा सफल होता है और पढ़ी गई आईडी लिखित आईडी के बराबर होती है।
string
मूल्य के बारे में: सिद्धांत समान है। आपको केवल यह पता लगाने की आवश्यकता है कि कैसे age
मान विभाजित किया गया था, इसके बाइनरी मान को कैसे विभाजित किया जाए। पूरे person
संरचना को पढ़ने/लिखने के संबंध में वही।
स्रोत
2011-10-12 21:45:51
आपने इस बार दो बार बक्षीस की पेशकश की है - लेकिन मुझे संदेह है कि सवाल स्वयं गलत है - यही कारण है कि आपको उपयोगी उत्तर नहीं मिल रहे हैं। –
कृपया परिभाषित करें कि प्रश्न के साथ क्या गलत है ... लॉक फ्री स्टैक मौजूद हैं। और वे सिर के लिए पॉइंटर्स का उपयोग करते हैं, अगले ... – NoSenseEtAl