本文结束一种新的锁,称为 timed_mutex
代码如下:
#include<iostream>
#include<mutex>
#include<thread>
#include<string>
#include<chrono>
using namespace std;
timed_mutex tmx;
void fun1(int id, const string& str)
{
if (tmx.try_lock())
{
cout << "Thread " << id << "lock and do smething" << endl;
for (int i = 0; i < 10; i++)
{
cout << i << " " << str << endl;
this_thread::sleep_for(chrono::seconds(1));
}
tmx.unlock();
}
}
void fun2(int id, const string& str)
{
this_thread::sleep_for(chrono::seconds(2));
if (tmx.try_lock_for(chrono::seconds(5)))
{
cout << "Thread " << id << " :" << str << endl;
tmx.unlock();
}
else
{
cout << "Time is consumed " << endl;
}
}
int main(void)
{
thread t1(fun1, 1, "Hello World");
thread t2(fun2, 2, "Good morning");
t1.join();
t2.join();
return 0;
}
下面对一些内容进行介绍:
timed_mutex 为时间互斥锁,即可以起到限时等待的作用。
在这之中,tmx.try_lock 起到了设置了一个限时等待锁。 for循环里面时打印10次字符串,每次打印输出后延时1s。那么其就延时了10s。
fun2中,第28行休眠2秒,让线程1先占据资源。第29行:
if (tmx.try_lock_for(chrono::seconds(5)))
代表等待5s,如果5s内上锁成功了,就执行 if 语句里面的内容。
但是显然无法上锁成功,因为线程1占据了10s。所以无法执行。最后结果为: