std :: lock用于防止死锁,对吗?但是在我的测试中,它仍然导致死锁.你能检查我的测试代码,看看我是否错误地使用了它?
std::mutex m1;
std::mutex m2;
void func1()
{
std::unique_lock<std::mutex> lock1(m1, std::defer_lock);
printf("func1 lock m1\n");
std::this_thread::sleep_for(std::chrono::seconds(2));
std::unique_lock<std::mutex> lock2(m2, std::defer_lock);
printf("func1 lock m2\n");
std::lock(m1, m2);
printf("func1 std lock\n");
}
void func2()
{
std::unique_lock<std::mutex> lock1(m2, std::defer_lock);
printf("func2 lock m2\n");
std::this_thread::sleep_for(std::chrono::seconds(2));
std::unique_lock<std::mutex> lock2(m1, std::defer_lock);
printf("func2 lock m1\n");
std::lock(m2, m1);
printf("func2 std lock\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
std::thread th1(func1);
std::thread th2(func2);
th1.join();
th2.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:func1 lock m1 func2 lock m2 func2 lock m1 func1 lock m2 func2 std …
我正在使用 windbg 开始使用 vmware windows 机器进行内核调试。我提到
https://msdn.microsoft.com/en-us/library/windows/hardware/ff538143(v=vs.85).aspx。
但我没有成功。我有两个问题。
1)。通过这样的命令启动windbg后:
**windbg -k com:port=\\10.57.43.22\pipe\debug,pipe**
Run Code Online (Sandbox Code Playgroud)
它会显示:
**Fail to open \\10.57.43.22\pipe\debug
Kernel debugger failed initialization, Win32 error On1326
"Logon failure: unknown user name or bad password"**
Run Code Online (Sandbox Code Playgroud)
是什么原因?我没有空间输入用户名或密码。
2)。在msdn文章中,它说:
在虚拟机中,配置 COM 端口以映射到命名管道。
我在 vmware 虚拟机上添加了一个使用命名管道的串行端口。如何将 COM 端口映射到管道?
如果我不使用互斥锁,以下源代码有什么问题吗?
bool bStop = false;
void thread1_fun()
{
while (!bStop)
{
doSomething();
}
}
void thread2_fun()
{
bStop = true;
}
Run Code Online (Sandbox Code Playgroud)