问个线程死锁的问题...lock()嵌套

AKULAKK 2008-07-09 11:49:13
最近在做多人socket服务器,在处理服务器逻辑的时候遇到以下代码写法,不知有何不妥

private string c(){
lock(new object){
//code A
lock(new object){
//codeB
}
}
}

这样连续lock会不会导致死锁?

还有就是第二种情况

private string a(){
lock(userstore){
//服务器逻辑...
b();//入库
}
}

private string b(){
lock(userstore){
//code...
//DB操作
}
}

同样是lock的UserStore,但是是放在2个函数里面的.
以上函数都有可能同时被多个线程访问到.这样写会有问题吗?会导致死锁吗?
或者说我的lock是不是写的太多了?
...全文
274 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leo_Akira 2011-02-17
  • 打赏
  • 举报
回复
cvb
HolyPlace 2008-07-09
  • 打赏
  • 举报
回复
学习,帮顶!
gomoku 2008-07-09
  • 打赏
  • 举报
回复
这样连续lock会不会导致死锁?
No.
lock(new object()) is wrong,
but it is ok to aquire multiple locks:


private string c()
{
lock(objectA)
{
//code A
lock(objectB)
{
//codeB
}
}
}


还有就是第二种情况 ...
The recursive lock itself is not a problem.
fuadam 2008-07-09
  • 打赏
  • 举报
回复
private string c(){
lock(new object){
//code A
lock(new object){
//codeB
}
}
}

这样连续lock会不会导致死锁?
====================================
你每次lock的时候都new object()?这样是不会死锁因为根本就没锁住



private string a(){
lock(userstore){
//服务器逻辑...
b();//入库
}
}

private string b(){
lock(userstore){
//code...
//DB操作
}
}

同样是lock的UserStore,但是是放在2个函数里面的.
以上函数都有可能同时被多个线程访问到.这样写会有问题吗?会导致死锁吗?
或者说我的lock是不是写的太多了?
=================================================================
不会,只要有一个线程lock住了userstore,其他线程就要等你这个线程执行结束才能再次lock住userstore
GhostAdai 2008-07-09
  • 打赏
  • 举报
回复
lock太多了-_-bb
fuadam 2008-07-09
  • 打赏
  • 举报
回复
有什么疑问
AKULAKK 2008-07-09
  • 打赏
  • 举报
回复
真的吗

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧