#include <iostream>
#include <thread>
#include <mutex>
#include <atomic>
static const int num_threads = 10 ;
std:: atomic < int > cnt{ 0 } ;
//This function will be called from a thread
void call_from_thread( int tid) {
while ( cnt! = tid)
std:: this_thread :: yield ( ) ;
std:: cout << "Launched by thread " << tid << std:: endl ;
cnt++ ;
}
int main( ) {
std:: thread t[ num_threads] ;
//Launch a group of threads
for ( int i = 0 ; i < num_threads; ++ i) {
t[ i] = std:: thread ( call_from_thread, i) ;
}
std:: cout << "Launched from the main\n " ;
//Join the threads with the main thread
for ( int i = 0 ; i < num_threads; ++ i) {
t[ i] .join ( ) ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8bXV0ZXg+CiNpbmNsdWRlIDxhdG9taWM+CgpzdGF0aWMgY29uc3QgaW50IG51bV90aHJlYWRzID0gMTA7CgpzdGQ6OmF0b21pYzxpbnQ+IGNudHswfTsgCgovL1RoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZnJvbSBhIHRocmVhZAoKdm9pZCBjYWxsX2Zyb21fdGhyZWFkKGludCB0aWQpIHsKICAgIHdoaWxlIChjbnQhPXRpZCkgCiAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsgCQogICAgc3RkOjpjb3V0IDw8ICJMYXVuY2hlZCBieSB0aHJlYWQgIiA8PCB0aWQgPDwgc3RkOjplbmRsOwogICAgY250Kys7IAp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6dGhyZWFkIHRbbnVtX3RocmVhZHNdOwoKICAgIC8vTGF1bmNoIGEgZ3JvdXAgb2YgdGhyZWFkcwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgKytpKSB7CiAgICAgICAgdFtpXSA9IHN0ZDo6dGhyZWFkKGNhbGxfZnJvbV90aHJlYWQsIGkpOwogICAgfQoKICAgIHN0ZDo6Y291dCA8PCAiTGF1bmNoZWQgZnJvbSB0aGUgbWFpblxuIjsKCiAgICAvL0pvaW4gdGhlIHRocmVhZHMgd2l0aCB0aGUgbWFpbiB0aHJlYWQKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7ICsraSkgewogICAgICAgIHRbaV0uam9pbigpOwogICAgfQoKICAgIHJldHVybiAwOwp9