История изменений
Исправление placement_new, (текущая версия) :
volatile bool ready = false;
int data = 0;
int main()
{
std::thread t1([&]() {
data = 42;
std::atomic_thread_fence(std::memory_order_release);
ready = true;
});
std::thread t2([&]() {
while (!ready) {
std::this_thread::yield();
}
std::atomic_thread_fence(std::memory_order_acquire);
assert(data == 42);
});
t1.join();
t2.join();
}
У меня в коде нет ни одного атомика (явного:)), тем не менее код на x86 будет прекрасно работать.
Исходная версия placement_new, :
volatile bool ready = false;[]
int data = 0;
int main()
{
std::thread t1([&]() {
data = 42;
std::atomic_thread_fence(std::memory_order_release);
ready = true;
});
std::thread t2([&]() {
while (!ready) {
std::this_thread::yield();
}
std::atomic_thread_fence(std::memory_order_acquire);
assert(data == 42);
});
t1.join();
t2.join();
}
У меня в коде нет ни одного атомика (явного:)), тем не менее код на x86 будет прекрасно работать.