में एक विनाशक में एक म्यूटेक्स लॉक करना मेरे पास कुछ कोड है जो थ्रेड सुरक्षित और अपवाद सुरक्षित होना चाहिए।सी ++ 11
#include <mutex>
#include <thread>
std::mutex mutex;
int n=0;
class Counter{
public:
Counter(){
std::lock_guard<std::mutex>guard(mutex);
n++;}
~Counter(){
std::lock_guard<std::mutex>guard(mutex);//How can I protect here the underlying code to mutex.lock() ?
n--;}
};
void doSomething(){
Counter counter;
//Here I could do something meaningful
}
int numberOfThreadInDoSomething(){
std::lock_guard<std::mutex>guard(mutex);
return n;}
मैं एक म्युटेक्स है कि मैं एक वस्तु का नाशक में बंद करने की जरूरत है: नीचे कोड मेरी समस्या का एक बहुत ही सरलीकृत संस्करण है। समस्या यह है कि मेरे विनाशक को अपवाद नहीं फेंकना चाहिए।
मैं क्या कर सकता हूं?
0) मैं एक परमाणु चर (बेशक यह चाल यहाँ करना होगा साथ n
को बदल नहीं सकते, लेकिन वह मेरे सवाल के बिंदु)
1) मैं एक स्पिन के साथ मेरी म्युटेक्स ताला
बदल सकते नहीं है2) मैं लॉकिंग को अनंत लूप में तब तक कोशिश कर सकता हूं जब तक कि मैं लॉक प्राप्त नहीं करता, बिना किसी अपवाद के
इनमें से कोई भी समाधान बहुत आकर्षक प्रतीत नहीं होता है। क्या आपको एक ही समस्या है? आपने इसे कैसे ठीक किया ?
'मेरे पास एक म्यूटेक्स है जिसे मुझे ऑब्जेक्ट के विनाशक में लॉक करने की आवश्यकता है' - एक बुरा विचार की तरह लगता है। हमें समाधान प्रदान करने और इसके साथ समस्याओं को ठीक करने के बजाय, आपको हमें यह बताने चाहिए कि आप किस समस्या को हल करने की कोशिश कर रहे हैं, इसलिए हम एक बेहतर समाधान प्रदान कर सकते हैं। –
@RobertHarvey मैं वास्तव में क्या करना चाहता हूं कि डेटाबेस में सहेजे जाने के बाद साझा कैश में संशोधन डालना है। – Arnaud