社区
C++ 语言
帖子详情
多线程死锁
zhangjingyuhua
2009-04-29 07:32:59
A_lock()
B_lock()
do_something()
A_unlock()
B_unlock()
是否能产生死锁,
死锁的条件是什么?
...全文
1246
23
打赏
收藏
多线程死锁
A_lock() B_lock() do_something() A_unlock() B_unlock() 是否能产生死锁, 死锁的条件是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
datouqianqian
2010-01-30
打赏
举报
回复
[Quote=引用 21 楼 deerwin1986 的回复:]
会出现死锁啊 只要另外有个程序要求的顺序是BA就会有问题。。。
[/Quote]
是的啊,这种情况就可能死锁了
HelloDan
2009-05-01
打赏
举报
回复
[Quote=引用 21 楼 deerwin1986 的回复:]
会出现死锁啊 只要另外有个程序要求的顺序是BA就会有问题。。。
[/Quote]
这种情况是绝对有可能的。
deerwin1986
2009-05-01
打赏
举报
回复
会出现死锁啊 只要另外有个程序要求的顺序是BA就会有问题。。。
BuleRiver
2009-05-01
打赏
举报
回复
13楼,正解
zhaohongbo83
2009-04-30
打赏
举报
回复
两个公共资源,1,2
两个线程A,B
A访问1,B访问资源2,1被A访问后,2被B访问,没有释放,这是A需要访问资源2
B需要访问资源1,
这样两个线程互相等待,就造成了线程死锁
qqiuzaihui
2009-04-30
打赏
举报
回复
顶13楼 "要保证正确操作锁的顺序, 后入的锁要先出. "
dinona
2009-04-30
打赏
举报
回复
很显然你的意思是这个枷锁操作是加在线程函数里面的
答案是不会死锁的(在你创建两个同样的线程时)
哪个先解锁都没问题,问题在于枷锁操作
acdbxzyw
2009-04-29
打赏
举报
回复
看do something 里面了
如果里面需要调用B占有的资源,那么会发生死锁
Jinhao
2009-04-29
打赏
举报
回复
这也看不出来。单纯地这样是不会的。只是用两次锁本来的开销并不小。
zhangjingyuhua
2009-04-29
打赏
举报
回复
死锁是没有,但我觉得是不是会发生饥饿状态?
Jinhao
2009-04-29
打赏
举报
回复
A_lock()
B_lock()
do_something()
A_unlock()
B_unlock()
--------
单纯地这么看,不会有死锁.
其次.如果do_something里面会调用A_lock,则要看A_lock的实现.
最后,要保证正确操作锁的顺序, 后入的锁要先出.
A_lock()
B_lock()
do_something()
B_unlock()
A_unlock()
zhangjingyuhua
2009-04-29
打赏
举报
回复
我也知道不会死锁,我只在看到这里我觉很别扭,
因为B锁是在A锁后边加上的,那道理应该是后加的锁
先解。
lin_style
2009-04-29
打赏
举报
回复
我在用别人的时,别人不应该在等我。
满足这一条就不会死了。
A_lock()
B_lock()
do_something()
A_unlock()
B_unlock()
除非do_something有对A_lock操作。
zmsun
2009-04-29
打赏
举报
回复
这个没有研究过
lin_style
2009-04-29
打赏
举报
回复
win32.多线程程序设计\Win32 多线程程序设计(候捷译)
LZ是在看这本书吧。。
我看到这里也感觉奇怪,不会死锁的。
pengzhixi
2009-04-29
打赏
举报
回复
mark
zhangjingyuhua
2009-04-29
打赏
举报
回复
[Quote=引用 5 楼 Jinhao 的回复:]
引用 4 楼 zhangjingyuhua 的回复:
别跑题,是在一个函数中
func()
{
lock(A)
lock(b)
do something()
unlock(b)
unlock(A)
}
加锁顺序是A->b
解锁顺序是:b->A
把题看清再说话
麻烦你看清楚。已经说了,看不出来。
我写那段代码是回答你 死锁的条件是什么? 这个问题
这与是不是在一个函数中无关。明白不?
如果你懂了,那你还跑到这里来问什么?
func()
{
lock(A)
…
[/Quote]
老大,没有别的函数,只有一个函数,服你
lingyin55
2009-04-29
打赏
举报
回复
do_something() 不对锁进行操作的话,这里应该是不会引发死锁的。
[Quote=引用楼主 zhangjingyuhua 的帖子:]
A_lock()
B_lock()
do_something()
A_unlock()
B_unlock()
是否能产生死锁,
死锁的条件是什么?
[/Quote]
Jinhao
2009-04-29
打赏
举报
回复
[Quote=引用 4 楼 zhangjingyuhua 的回复:]
别跑题,是在一个函数中
func()
{
lock(A)
lock(b)
do something()
unlock(b)
unlock(A)
}
加锁顺序是A->b
解锁顺序是:b->A
把题看清再说话
[/Quote]
麻烦你看清楚。已经说了,看不出来。
我写那段代码是回答你 死锁的条件是什么? 这个问题
这与是不是在一个函数中无关。明白不?
如果你懂了,那你还跑到这里来问什么?
func()
{
lock(A)
lock(b)
do something()
unlock(b)
unlock(A)
}
你觉得这个没问题? 光看这个有什么用?
如果存在另一个函数
func2()
{
lock(B)
lock(A)
do something()
unlock(A)
unlock(B)
}
那你认为你的func有没有问题?
zhangjingyuhua
2009-04-29
打赏
举报
回复
别跑题,是在一个函数中
func()
{
lock(A)
lock(b)
do something()
unlock(b)
unlock(A)
}
加锁顺序是A->b
解锁顺序是:b->A
把题看清再说话
加载更多回复(3)
计算机操作系统(第三版)
1.2.3 多道批处理系统 7 1.2.4 分时系统 9 1.2.5 实时系统 11 1.2.6 微机操作系统的发展 12 1.3 操作系统的基本特性 14 1.3.1 并发性 14 1.3.2 共享性 15 1.3.3 虚拟技术 16 1.3.4 异步性 17 1.4 ...
多线程
死锁
以及解决方案
在我们项目开发中,
多线程
问题是不可避免的,本章谈谈
多线程
死锁
问题以及解决方案;
多线程
环境中不可避免的要遇到线程
死锁
的问题。Java不像数据库那么能够检测到
死锁
,然后进行处理,Java中的
死锁
问题,只能通过...
多线程
死锁
解决方法
多线程
死锁
解决方法 java里面,
多线程
死锁
共分为两种方法,第一种为synchronized方式,第二种方法为lock锁(JDk 5.0 新增) synchronized方式 其主要分为同步代码块与同步方法。 同步代码块 方式一:同步代码块 ...
java
多线程
死锁
案例(代码案例)
java
多线程
死锁
案例(代码案例) 什么是
死锁
当一个线程拥有A对象锁,并等待B对象锁的时候,另一个线程拥有B对象锁,并等待A对象锁,这就造成了
死锁
。 一个线程可以同时拥有多个对象的锁标记,当线程阻塞时,不会...
多线程
死锁
的产生以及如何避免
死锁
多线程
死锁
的产生以及如何避免
死锁
C++ 语言
64,701
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章