锁线程的问题,为啥计算结果不对

Rainlonely 2009-11-19 02:32:49
        public const long max = 100;
static string buffer = "0";
private object hoho = new object();
static void Main(string[] args)
{

Program test = new Program();
Thread a = new Thread(new ThreadStart(test.aDowork));
a.Start();
Thread b = new Thread(new ThreadStart(test.bDowork));
b.Start();
Thread c = new Thread(new ThreadStart(test.cDowork));
c.Start();
Thread d = new Thread(new ThreadStart(test.dDowork));
d.Start();
a.Join();
b.Join();
c.Join();
d.Join();
Console.WriteLine("Resultis{0}", buffer);
}

void aDowork()
{
for (long i = 1; i < max / 4; i++)
{
lock(hoho)
{
buffer = (long.Parse(buffer) + i).ToString() ;
Console.WriteLine("{0}+{1}", buffer, i);
Console.ReadKey();
}
}
}

void bDowork()
{
for (long i = max / 4; i < max/2; i++)
{
lock (hoho) { buffer = (long.Parse(buffer) + i).ToString(); }
Console.WriteLine("{0}+{1}", buffer, i);

}
}

void cDowork()
{
for (long i = max / 2; i < max * 3 / 4; i++)
{
lock (hoho) { buffer = (long.Parse(buffer)).ToString(); }
Console.WriteLine("{0}+{1}", buffer, i);

}
}
void dDowork()
{
for(long i = max*3/4;i<=max;i++)
{
lock (hoho) { buffer = (long.Parse(buffer)).ToString(); }
Console.WriteLine("{0}+{1}", buffer, i);

}
}

一直以为这个线程是执行完一个 然后进行下一个 再计算, 调试的时候发现时abcdabcd这么来的 可是 最后的结果还是不对的, 哪位高手能解释一下??
...全文
25 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rainlonely 2009-11-19
  • 打赏
  • 举报
回复
我错了 c和d 忘记+i了

110,561

社区成员

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

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

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