互斥锁
#include <iostream>
#include <windows.h>
#include <mutex>
std::mutex mtx;
void threadFunc(char c) {
std::lock_guard<std::mutex> lockGuard(mtx);
for (int i = 0; i < 50; i++) {
std::cout << c << std::endl;
}
}
int main()
{
HANDEL handleA;
HANDEL handleB;
CreateThread(NULL, 0, threadFunc, '*', 0, &handleA);
CreateThread(NULL, 0, threadFunc, '&', 0, &handleB);
Sleep(1000 * 10);
return 0;
}
死锁条件
- 互斥条件
线程对于所分配的资源具有排它性,对全局共享资源不要加锁 - 请求和保持条件
目标线程请求的资源被占用资源而发生阻塞,其他线程不释放锁。 - 不剥夺条件
任何一个资源在没被该线程释放之前,任何其他线程都无法对他剥夺占用 - 循环等待条件
当发生死锁时,所等待的线程必定会形成一个环路(类似于死循环),造成永久阻塞。