Q:同一线程,调用有互斥锁的函数,不开锁的情况下,是否可以多次调用?
A:不能
#include <iostream>
#include <mutex>
#include <thread>
using namespace std;
mutex Test_mutex;
void out()
{
//Test_mutex.lock();//注释掉锁的情况
cout << "out function" << endl;
}
void test()
{
out();
sleep(2);
cout << "fisrt time over" << endl;
out();
cout << "all over" << endl;
}
int main()
{
cout << "start" << endl;
thread th1(test);
th1.join();
cout << "end" << endl;
return 0;
}

把锁开打的运行结果:

退出之后,再次调用加锁的函数,阻塞在锁哪里;即使是通过一个线程,也不能在不开锁的情况下,多次调用加了锁的函数
本文探讨了在同一个线程内调用带有互斥锁保护的函数时的行为特征。通过实验验证,即使在同一线程内,不释放锁的情况下无法连续调用已加锁的函数。
751

被折叠的 条评论
为什么被折叠?



