#include <iostream>
#include <thread>
#include <mutex>
#include <atomic>
#include <chrono>
using namespace std;
struct info
{
std::mutex access;
string name;
};
info userStruct; //this guy shared between two threads
void f()
{
while (1)
{
std::lock_guard<std::mutex> lock(userStruct.access);
userStruct.name= "TEST";
}
}
void g()
{
while (1)
{
{
std::unique_lock<std::mutex> lock(userStruct.access, std::try_to_lock);
if(!lock.owns_lock()){
std::cout << "No lock" <<std::endl;
}
else
{
std::cout << "Got access:" << userStruct.name <<std::endl;
}
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
// std::this_thread::yield();
}
}
int main() {
thread t1(f);
thread t2(g);
t1.join();
t2.join();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8bXV0ZXg+CiNpbmNsdWRlIDxhdG9taWM+CiNpbmNsdWRlIDxjaHJvbm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgaW5mbwp7CiAgICBzdGQ6Om11dGV4IGFjY2VzczsgCiAgICBzdHJpbmcgbmFtZTsKCn07CgppbmZvIHVzZXJTdHJ1Y3Q7IC8vdGhpcyBndXkgc2hhcmVkIGJldHdlZW4gdHdvIHRocmVhZHMKCnZvaWQgZigpIAp7CiAgICB3aGlsZSAoMSkKICAgIHsKICAgIAkJc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodXNlclN0cnVjdC5hY2Nlc3MpOwogICAgICAgIAl1c2VyU3RydWN0Lm5hbWU9ICJURVNUIjsKICAgIH0gICAKfQoKdm9pZCBnKCkKewogICAgd2hpbGUgKDEpCiAgICB7CiAgICAJewogICAgCQlzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sodXNlclN0cnVjdC5hY2Nlc3MsIHN0ZDo6dHJ5X3RvX2xvY2spOwoJCQlpZighbG9jay5vd25zX2xvY2soKSl7IAoJCQkJc3RkOjpjb3V0IDw8ICJObyBsb2NrIiA8PHN0ZDo6ZW5kbDsgCgkJCX0KICAgICAgICAJZWxzZQogICAgICAgIAl7CgkJCQlzdGQ6OmNvdXQgPDwgIkdvdCBhY2Nlc3M6IiA8PCB1c2VyU3RydWN0Lm5hbWUgPDxzdGQ6OmVuZGw7CiAgICAgICAgCX0KICAgIAl9CiAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSk7Ci8vICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOyAKICAgIH0KfQppbnQgbWFpbigpIHsKCXRocmVhZCB0MShmKTsKCXRocmVhZCB0MihnKTsKCXQxLmpvaW4oKTsKCXQyLmpvaW4oKTsgCglyZXR1cm4gMDsKfQ==