मेरे पास 2 धागे हैं और एक साझा float
वैश्विक है। एक धागा केवल चर को लिखता है जबकि दूसरा केवल इससे पढ़ता है, क्या मुझे इस चर के उपयोग को लॉक करने की आवश्यकता है? दूसरे शब्दों में:क्या मुझे एक लॉक की आवश्यकता है जब केवल एक ही थ्रेड किसी साझा चर को लिखता हो?
volatile float x;
void reader_thread() {
while (1) {
// Grab mutex here?
float local_x = x;
// Release mutex?
do_stuff_with_value(local_x);
}
}
void writer_thread() {
while (1) {
float local_x = get_new_value_from_somewhere();
// Grab mutex here?
x = local_x;
// Release mutex?
}
}
मेरा मुख्य चिंता यह है कि एक लोड या एक float
की दुकान परमाणु नहीं किया जा रहा है, जैसे कि local_x
reader_thread
में एक फर्जी, आंशिक रूप से अद्यतन मूल्य होने समाप्त होता है।
- क्या यह एक वैध चिंता है?
- क्या म्यूटेक्स के बिना परमाणुता की गारंटी देने का कोई और तरीका है?
- साझा चर के काम के रूप में
sig_atomic_t
का उपयोग करेगा, मान लीजिए कि मेरे उद्देश्यों के लिए पर्याप्त बिट्स हैं?
प्रश्न में भाषा सी है pthreads का उपयोग कर सी है।
आप म्यूटेक्स का उपयोग करने से क्यों बचना चाहते हैं? –
पाठक धागा प्लगइन के रूप में गेम के हर फ्रेम को चलाएगा। हालांकि यह शायद समय से पहले अनुकूलन है, मैं किसी भी ओवरहेड से बचना चाहता था जो मैं कर सकता हूं। उस ने कहा, मैं जवाब से आश्वस्त हूं कि मुझे एक म्यूटेक्स का उपयोग करना चाहिए, और मुझे संदेह है कि ओवरहेड की मात्रा एक समस्या होगी। –
सभी उत्तरों के लिए धन्यवाद। लगता है कि मुझे परमाणु होने के लिए विशेष रूप से पोर्टेबिलिटी के लिए पढ़ने/लिखने पर भरोसा नहीं करना चाहिए, इसलिए लॉकिंग जाने का तरीका प्रतीत होता है। –