头文件<mutex>
相比于lock_guard,更灵活,但效率上差一点,内存也占用更多.
可以看到unique_lock也含有第二个参数的构造函数.常规使用和lock_guard没什么区别。
std::try_to_lock()
std::try_to_lock()会尝试加锁,使用前不能自己lock()
使用方法如下:
class A
{
private:
list<int>msgqueue;
mutex mymutex1;
public:
void MsgEnqueue()
{
for (int i = 0; i < 10000; ++i)
{
cout << "MsgEnqueue()执行,插入一个元素 " << i << endl;
unique_lock<mutex>l(mymutex1,std::try_to_lock);
if (l.owns_lock())
{
msgqueue.push_back(i);
}
else
{
cout << "MsgEnqueue执行,但是没有拿到锁 : " << i << endl;
}
}
return;
}
bool helper(int & command)
{
unique_lock<mutex>mylock (mymutex1);
chrono::microseconds d(2000);
this_thread::