多线程死锁的两种典型情形及其归纳分析是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计795个文字,预计阅读时间需要4分钟。
1. 死锁可能发生在以下情况: - 两个或多个进程/线程持有资源,并且都等待对方释放资源。 - 资源不能被进一步分配,因为每个进程/线程都在等待未被释放的资源。
2. 假设代码如下: c mutex; // 代表一个全局互斥锁对象
void A() { mutex.lock(); // 这里操作共享数据 B(); mutex.unlock(); }
void B() { mutex.lock(); // 这里操作共享数据 A(); mutex.unlock(); }
一、死锁会在什么情况发生
1、假设有如下代码
mutex; //代表一个全局互斥对象 void A() { mutex.lock(); //这里操作共享数据 B(); //这里调用B方法 mutex.unlock(); return; } void B() { mutex.lock(); //这里操作共享数据 mutex.unlock(); return; }
此时会由于在A、B方法中相互等待unlock而导致死锁。
本文共计795个文字,预计阅读时间需要4分钟。
1. 死锁可能发生在以下情况: - 两个或多个进程/线程持有资源,并且都等待对方释放资源。 - 资源不能被进一步分配,因为每个进程/线程都在等待未被释放的资源。
2. 假设代码如下: c mutex; // 代表一个全局互斥锁对象
void A() { mutex.lock(); // 这里操作共享数据 B(); mutex.unlock(); }
void B() { mutex.lock(); // 这里操作共享数据 A(); mutex.unlock(); }
一、死锁会在什么情况发生
1、假设有如下代码
mutex; //代表一个全局互斥对象 void A() { mutex.lock(); //这里操作共享数据 B(); //这里调用B方法 mutex.unlock(); return; } void B() { mutex.lock(); //这里操作共享数据 mutex.unlock(); return; }
此时会由于在A、B方法中相互等待unlock而导致死锁。

