lock的结果疑问

ysz89757 2016-05-04 08:39:58


class Program
{
private static readonly object obj = new object();
static void Main(string[] args)
{
work();
Console.ReadLine();
}

static void work()
{
for (int i = 0; i < 100; i++)
{
new System.Threading.Thread((o) => { print(o); }).Start(i);
}
}
static int count = 0;

static void print(object i)
{
lock (obj)
{
Console.WriteLine(string.Format("i:{0},value:{1}", i, count++));
}
}

}





我预期i和value的值是相等的,结果却不相等,应该怎么理解lock
msdn:
lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysz89757 2016-05-04
  • 打赏
  • 举报
回复
蒙了,确实没什么问题,lock的作用是保证Value每次递增只能是1,线程的启动顺序搞混了
songbing774933 2016-05-04
  • 打赏
  • 举报
回复
没有任何问题啊,lock保证了 每次只有一个线程执行Console.WriteLine(string.Format("i:{0},value:{1}", i, count++));
所以,打印除阿里的count是递增的。
i没有完全递增,仅仅是因为线程启动的快慢而已,后面的线程先于之前创建的线程运行了到了lock

111,129

社区成员

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

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

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