本文结束一种新的锁,称为 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。所以无法执行。最后结果为: