一个关于lock的多线程。

ping55 2012-09-08 10:16:35
题目是这样的,想必很多人都看过这个东西吧:
根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}

答案:
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

---------------------------------------------------------------------------------------------------------------
我的问题这样:我以前基本没接触过多线程的,如果觉得我的问题很白痴 请见谅!。。。。。。
我没想明白答案所说的int是按值传递传递的只是一个副本,换成object就会死锁 是一个什么样的情况,
是在多线程情况下吗,是两个线程同时调用这个方法吗。是两个或多个线程的话,lock锁住了对象 那其他线程就不回去执行了,,,,那单线程下的话 就更不应该出现死锁了,,,那答案中所说的int换成object会死锁 到底是一个什么样的情况呢。。。。。?
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xboxeer 2012-09-11
  • 打赏
  • 举报
回复
lock只能锁引用类型 你这个要用interlock 专门用来锁值类型
原因是引用类型对象有专门的一块内存区域叫做同步索引块 用来支持这种同步操作 值类型是没有的

110,536

社区成员

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

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

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