王铁树 2015-12-31 02:56 采纳率: 28.6%
浏览 1750

WIN32 多线程程序设计一书中有如下部分。

问下这样的程序为什么会产生死锁?
当线程A 执行InitializeCriticalSection(list1->critical_sec);之后线程B怎么还可能执行
InitializeCriticalSection(list2->critical_sec); 这段不是早就被A给锁住了吗?

void SwapLists(List *list, List *list2)
{
List *tmp_list;
EnterCriticalSection(list1->critical_sec);
EnterCriticalSection(list2->critical_sec);
tmp->list = list1->head;
list1->head = list2->head;
list2->head = temp->list;
LeaveCriticalSection(list1->critical_sec);
LeaveCriticalSection(list2->critical_sec);
} 
  • 写回答

2条回答 默认 最新

  • threenewbee 2016-01-21 19:13
    关注

    因为两个线程的list1和list2参数可以不同,假设A调用的参数(这里指实参,不是形参)是list1 list2,B调用的是list2 list1
    那么可能两个list都锁上,并且等待另一个。
    你的疑惑在于,你觉得多个线程都是调用的一样的参数。

    评论

报告相同问题?

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?