我尝试通过以下代码执行经理作为线程。发生的奇怪之处在于,当我逐步调整代码时,似乎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()
方法。
我怀疑某些更复杂的东西,因为有时候程序在执行时甚至没有碰到断点(我的执行完全相同)!
不是线程开发的大师,我需要知道如何解决这个问题。
答案 0 :(得分:1)
这是竞争条件。一个帖子比赛调用Start
,其他比赛调用Stop
。其中一个人首先达到了目标。有意义吗?
如果您希望首先调用Start,请按顺序调用它们:
Start();
...
Stop();