void m () { int a(0), b(0); auto f = [&]() { while (1) { __transaction_atomic { a++; b++; if (a % 5 == 2) { a+= 11; b += 11; } }; } }; std::thread(f).detach(); std::thread([&]{ while(1) { if ( __transaction_atomic(a-b) != 0 ) { printf("error\n"); exit(0); } } }).detach(); std::thread([] { sleep(1); printf("no errors\n"); exit(0); }).detach(); sleep(2); printf("exit\n"); return; }
void foobar(void) { x = y + __transaction_atomic (york); }
int f2() { return __transaction_atomic (global + 3) + __transaction_atomic (global + 4); }
template<typename T> int foo() { return __transaction_atomic (global + 2) + __transaction_atomic (global + 3); }