में std :: thread के साथ परमाणुओं का उपयोग करना मेरे पास एक धागा है जिसे मैं एक लूप में बैठना चाहता हूं जब तक कि मैं प्रोग्राम से बाहर निकलने के लिए तैयार न हो, जिस बिंदु पर मैं इसे लूप से बाहर करना चाहता हूं और बाहर निकलें ताकि मैं std::thread::join
पर कॉल कर सकूं। सी ++ 03 के दिनों में, मैं बाहर निकलने के लिए धागे को बताने के लिए बस एक लॉक द्वारा संरक्षित बूल का उपयोग करता हूं। इस बार मैंने सोचा कि मैं नई परमाणु पुस्तकालय (विशेष रूप से std::atomic_bool
) का लाभ उठाऊंगा, लेकिन मुझे परेशानी हो रही है।सी ++ 11
#include <atomic>
#include <thread>
#include <cstdio>
using namespace std;
void setBool(atomic_bool& ab)
{
ab = true;
}
int main()
{
atomic_bool b;
b = false;
thread t(setBool, b);
t.join();
printf("Atomic bool value: %d\n", b.load());
return 0;
}
thread t
की घोषणा this कुरूपता बाहर थूक जब मैं संकलन करने का प्रयास करें: नीचे अपने परीक्षण मामला है। त्रुटि के मध्य भाग हो रहा है:
प्रकार के गैर-स्थिरांक संदर्भ की अवैध प्रारंभ 'std :: atomic_bool &' प्रकार 'std :: atomic_bool'
क्यों की एक rvalue से क्या मुझे atomic_bool
का संदर्भ नहीं मिल सकता है? इसके बजाय मुझे क्या करना चाहिए?
@ निकोलबोलस कैसे? धागे के बीच डेटा साझा करने के लिए एक मानक तरीका तक पहुंचने से पहले एक म्यूटेक्स के साथ एक चर को लॉक नहीं कर रहा है? –
ओह, ठीक है। कभी नहीं ... –