Может кто-то, пожалуйста, помогите мне понять, что я делаю неправильно здесь? Когда я делаю члены данных класса не атомарными, он работает нормально.Атомный элемент данных, вызывающий из потока
class AtomicTest
{
atomic<int> A{ 0 };
atomic<int> B{ 0 };
public :
AtomicTest() { }
void func1()
{
A = 1;
cout << "func1 " << A << endl;;
}
void func2()
{
cout << "func2 " << A << endl;
A = A + 1;
cout << A << endl;
}
};
int main()
{
AtomicTest a;
thread t1(&AtomicTest::func1, std::ref(a)); // I tried to move as well, i know ref would share data between two threads but i can use mutex to protect data if its needed but i cannot even call the func1
//thread t2(&AtomicTest::func2, std::ref(a));
t1.join();
//t2.join();
return 0;
}
Я не думаю, что вы попытались: 'std :: bind (& AtomicTest :: func1, std :: ref (a))' как единственный параметр для конструктора потоков? – WhozCraig
Я уверен, что нет, потому что я понятия не имел, почему он работает таким образом. Могу ли я узнать, почему это не сработало, и с помощью bind? –
Может кто-нибудь просветить меня о том, в чем проблема? Использование clang это прекрасно работает для меня. –