线程程序中执行的奇怪顺序

时间:2014-07-17 18:06:48

标签: c# multithreading visual-studio-2013

我尝试通过以下代码执行经理作为线程。发生的奇怪之处在于,当我逐步调整代码时,似乎Stop()方法在管理器中的Start()方法之前被称为

MyManager manager = new MyManager();
Thread thread = new Thread(manager.Start);
thread.Start();

while (Directory.GetFiles(pathToFiles).Length < 5)
  Thread.Sleep(1000);

manager.Stop();
thread.Join();

它甚至比那更怪异! 有时执行顺序就像它应该的那样。然后,好像有什么东西堵塞了理智,Stop()方法中的断点点击第一个,后面点击Start()方法。

我怀疑某些更复杂的东西,因为有时候程序在执行时甚至没有碰到断点(我的执行完全相同)!

不是线程开发的大师,我需要知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

这是竞争条件。一个帖子比赛调用Start,其他比赛调用Stop。其中一个人首先达到了目标。有意义吗?

如果您希望首先调用Start,请按顺序调用它们:

Start();
...
Stop();