क्या थ्रेड-सुरक्षित होने के लिए यहां अस्थायी उपयोग करना आवश्यक है?परमाणु लौटा है और क्या मुझे गेट में सुरक्षित होने के लिए अस्थायी उपयोग करना चाहिए?
int getVal() {
this->_mutex.lock();
int result = this->_val;
this->_mutex.unlock();
return result;
}
मैं तुम्हें सरल आरए II परीक्षण समारोह के disassembly दे देंगे
int test()
{
RAIITest raii; //let's say it's a scoped lock
return 3;
}
{
0x004013ce <_Z4testv>: push %ebp
0x004013cf <_Z4testv+1>: mov %esp,%ebp
0x004013d1 <_Z4testv+3>: sub $0x28,%esp
return 3;
0x004013d4 <_Z4testv+6>: lea -0x18(%ebp),%eax
0x004013d7 <_Z4testv+9>: mov %eax,(%esp)
0x004013da <_Z4testv+12>: call 0x4167a0 <_ZN8RAIITestD1Ev> //here destructor is called
0x004013df <_Z4testv+17>: mov $0x3,%eax //here result is pushed onto the stack
}
0x004013e4 <_Z4testv+22>: leave
0x004013e5 <_Z4testv+23>: ret
संकलक है जीसीसी/जी ++ 3.4.5
::: आकस्मिक रूप से इसे सी # और वीटीसी के रूप में पढ़ें। माफ़ कीजिये। – Brian
मुझे नहीं लगता कि आपका आरएआईआई उदाहरण क्या साबित करना है। निरंतर लौटने पर बस कंपाइलर को चिल्लाता है कि धोखा देना और अनुकूलित करना ठीक है क्योंकि वापसी मूल्य प्रभावित नहीं होगा। – jalf