#include #include #include volatile char data[64 * 3]; volatile char &a = data[64]; volatile char &b = data[64*2]; std::atomic barrier; char th1() { char vA; barrier++; while (barrier != 2); b = 1; vA = a; return vA; } char th2() { char vB; barrier++; while (barrier != 2); a = 1; vB = b; return vB; } int main() { auto a1 = std::async(th1); auto a2 = std::async(th2); char vA = a1.get(); char vB = a2.get(); printf("%d %d\n", vA, vB); return 0; }