码迷,mamicode.com
首页 > 编程语言 > 详细

win32多线程(三) 死锁

时间:2014-07-18 19:02:37      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   io   for   

任何时候当一段代码需要两个(或更多)资源时,都有潜在性的死锁。

void SwapLists(List *list1, List *list2) 
{ 
List *tmp_list; 
EnterCriticalSection(list1->m_section); 
EnterCriticalSection(list2->m_section); 
tmp->list = list1->head; 
list1->head = list2->head; 
list2->head = temp->list; 
LeaveCriticalSection(list1->m_section); 
LeaveCriticalSection(list2->m_section); 
} 

以上代码,

假设下面两次调用发生在不同线程的同一个时间点:
线程ASw apLists(home_address_list, work_address_list);
线程BSw apLists(work_address_list, home_address_list);

在线程A的SwapLists() 的第一次EnterCriticalSection() 之后,发生了context switch(译注:也就是调度程序选换了一个线程),然后线程B执行了它的SwapLists()操作,两个线程于是会落入“我等你,你等我”的轮回。线程A需要work_address_list,线程B需要hom e_address_list,而双方都掌握有对方所要的东西。这种情况称为死锁(deadlock)

在SwapLists()  中所发生的死锁问题,是因为它必须等待两个critical section。

WaitForMultipleObjects() 函数。它允许你对
操作系统发出“等待”的要求,直到所有指定的对象都激发才返回。但critical section不是内核对象,所以我们必须使用另外的办法来解决死锁问题。比如 互斥器(Mutexes)

win32多线程(三) 死锁,布布扣,bubuko.com

win32多线程(三) 死锁

标签:style   blog   color   使用   io   for   

原文地址:http://www.cnblogs.com/zhidao-chen/p/3853273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!