#include <iostream>
#include <thread>
#include <map>
#include <string>
using namespace std;
std:: map < std:: thread :: id , std:: string > threadMap;
std:: thread :: id threadId1;
void printThread( std:: thread :: id threadId) {
if ( threadMap.find ( threadId) ! = threadMap.end ( ) ) {
cout << "Thread exist name is " << threadMap[ threadId] << endl;
} else {
cout << "Thread isn't exist" << endl;
}
}
void executeThreads( ) {
std:: thread t1( [ ] ( ) {
threadMap.insert ( std:: pair < std:: thread :: id , std:: string > ( std:: this_thread :: get_id ( ) , string( "Thread1" ) ) ) ;
cout << "Printing thread 1" << endl;
printThread( std:: this_thread :: get_id ( ) ) ;
threadId1 = std:: this_thread :: get_id ( ) ;
} ) ;
cout << "Joining T1 thread" << endl;
t1.join ( ) ;
cout << "T1 joined thread" << endl;
std:: thread t2( [ ] ( ) {
threadMap.insert ( std:: pair < std:: thread :: id , std:: string > ( std:: this_thread :: get_id ( ) , string( "Thread2" ) ) ) ;
cout << "Printing thread 2" << endl;
printThread( std:: this_thread :: get_id ( ) ) ;
} ) ;
cout << "Joining T2 thread" << endl;
t2.join ( ) ;
cout << "T2 joined thread" << endl;
}
int main( ) {
executeThreads( ) ;
cout << "Checking if thread 1 ID still exist in map" << endl;
printThread( threadId1) ;
cout << "Checking if current thread exist in map" << endl;
printThread( std:: this_thread :: get_id ( ) ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RkOjptYXA8c3RkOjp0aHJlYWQ6OmlkLCBzdGQ6OnN0cmluZz4gdGhyZWFkTWFwOwpzdGQ6OnRocmVhZDo6aWQgdGhyZWFkSWQxOwoKdm9pZCBwcmludFRocmVhZChzdGQ6OnRocmVhZDo6aWQgdGhyZWFkSWQpIHsKCWlmICh0aHJlYWRNYXAuZmluZCh0aHJlYWRJZCkgIT0gdGhyZWFkTWFwLmVuZCgpKSB7CgkJY291dDw8IlRocmVhZCBleGlzdCBuYW1lIGlzICI8PHRocmVhZE1hcFt0aHJlYWRJZF08PGVuZGw7Cgl9IGVsc2UgewoJCWNvdXQ8PCJUaHJlYWQgaXNuJ3QgZXhpc3QiPDxlbmRsOwoJfQp9Cgp2b2lkIGV4ZWN1dGVUaHJlYWRzKCkgewoJc3RkOjp0aHJlYWQgdDEoW10oKXsKCQl0aHJlYWRNYXAuaW5zZXJ0KHN0ZDo6cGFpcjxzdGQ6OnRocmVhZDo6aWQsIHN0ZDo6c3RyaW5nPihzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSwgc3RyaW5nKCJUaHJlYWQxIikpKTsKCQljb3V0PDwiUHJpbnRpbmcgdGhyZWFkIDEiPDxlbmRsOwoJCXByaW50VGhyZWFkKHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpKTsKCQl0aHJlYWRJZDEgPSBzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKTsKCX0pOwoJY291dDw8IkpvaW5pbmcgVDEgdGhyZWFkIjw8ZW5kbDsKCXQxLmpvaW4oKTsKCWNvdXQ8PCJUMSBqb2luZWQgdGhyZWFkIjw8ZW5kbDsKCXN0ZDo6dGhyZWFkIHQyKFtdKCl7CgkJdGhyZWFkTWFwLmluc2VydChzdGQ6OnBhaXI8c3RkOjp0aHJlYWQ6OmlkLCBzdGQ6OnN0cmluZz4oc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCksIHN0cmluZygiVGhyZWFkMiIpKSk7CgkJY291dDw8IlByaW50aW5nIHRocmVhZCAyIjw8ZW5kbDsKCQlwcmludFRocmVhZChzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSk7Cgl9KTsKCWNvdXQ8PCJKb2luaW5nIFQyIHRocmVhZCI8PGVuZGw7Cgl0Mi5qb2luKCk7Cgljb3V0PDwiVDIgam9pbmVkIHRocmVhZCI8PGVuZGw7Cn0KCmludCBtYWluKCkgewoJZXhlY3V0ZVRocmVhZHMoKTsKCWNvdXQ8PCJDaGVja2luZyBpZiB0aHJlYWQgMSBJRCBzdGlsbCBleGlzdCBpbiBtYXAiPDxlbmRsOwoJcHJpbnRUaHJlYWQodGhyZWFkSWQxKTsKCWNvdXQ8PCJDaGVja2luZyBpZiBjdXJyZW50IHRocmVhZCBleGlzdCBpbiBtYXAiPDxlbmRsOwoJcHJpbnRUaHJlYWQoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOwoJcmV0dXJuIDA7Cn0=