// thread example
#include <iostream> // std::cout
#include <thread> // std::thread
void foo()
{
// do stuff...
}
void bar(int x)
{
// do stuff...
}
int main()
{
std::thread first (foo); // spawn new thread that calls foo()
std::thread second (bar,0); // spawn new thread that calls bar(0)
std::cout << "main, foo and bar now execute concurrently...\n";
// synchronize threads:
first.join(); // pauses until first finishes
second.join(); // pauses until second finishes
std::cout << "foo and bar completed.\n";
return 0;
}
Ly8gdGhyZWFkIGV4YW1wbGUKI2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgICAvLyBzdGQ6OmNvdXQKI2luY2x1ZGUgPHRocmVhZD4gICAgICAgICAvLyBzdGQ6OnRocmVhZAogCnZvaWQgZm9vKCkgCnsKICAvLyBkbyBzdHVmZi4uLgp9Cgp2b2lkIGJhcihpbnQgeCkKewogIC8vIGRvIHN0dWZmLi4uCn0KCmludCBtYWluKCkgCnsKICBzdGQ6OnRocmVhZCBmaXJzdCAoZm9vKTsgICAgIC8vIHNwYXduIG5ldyB0aHJlYWQgdGhhdCBjYWxscyBmb28oKQogIHN0ZDo6dGhyZWFkIHNlY29uZCAoYmFyLDApOyAgLy8gc3Bhd24gbmV3IHRocmVhZCB0aGF0IGNhbGxzIGJhcigwKQoKICBzdGQ6OmNvdXQgPDwgIm1haW4sIGZvbyBhbmQgYmFyIG5vdyBleGVjdXRlIGNvbmN1cnJlbnRseS4uLlxuIjsKCiAgLy8gc3luY2hyb25pemUgdGhyZWFkczoKICBmaXJzdC5qb2luKCk7ICAgICAgICAgICAgICAgIC8vIHBhdXNlcyB1bnRpbCBmaXJzdCBmaW5pc2hlcwogIHNlY29uZC5qb2luKCk7ICAgICAgICAgICAgICAgLy8gcGF1c2VzIHVudGlsIHNlY29uZCBmaW5pc2hlcwoKICBzdGQ6OmNvdXQgPDwgImZvbyBhbmQgYmFyIGNvbXBsZXRlZC5cbiI7CgogIHJldHVybiAwOwp9Cg==