1

对于我正在编写的测试用例,我想同时启动 2 个线程,目的是强制竞争条件或死锁,以确保我的测试代码正确处理这种情况。我不完全确定如何指示线程在完全相同的时间启动。有人可以告诉我如何指示 2 个线程同时启动吗?

worker1.Start() 和 worker2.Start() 调用几乎同时进行,但距离不足以暴露我正在尝试修复的错误。

这是我的测试用例。

[TestMethod]
public void test()
{
  var target = new TestableErqProtocolTools();
  var firstUri = HEDataScope.Scope.BusinessObjectServerUris[0].AbsoluteUri;

  var worker1 = new Thread(new ThreadStart(target.TestableAddServerUrlsFromScope));
  var worker2 = new Thread(new ThreadStart(target.TestableAddServerUrlsFromScope));

  var startEvent = new EventWaitHandle(false, EventResetMode.ManualReset);

  worker1.Start();
  worker2.Start();

  StringAssert.StartsWith(target.DefaultRemoteServerUrl, firstUri, "DefaultRemoteServerUrl is {0}"
            , String.IsNullOrEmpty(target.DefaultRemoteServerUrl) ? "<empty>" : target.DefaultRemoteServerUrl);      
}
4

2 回答 2

4

您无法控制它,并且使用一个处理单元,一次只能发生一件事。您可以做的是使用Barriers将线程同步到逻辑时间的位置。

于 2013-08-13T16:26:00.903 回答
3

您不能在完全相同的时间启动线程。你不能在单处理器机器上做到这一点。而且您不能在多处理器机器上强制执行它。

所以继续测试很多次。并在考虑并行性和多线程问题的情况下进行代码审查。

于 2013-08-13T16:24:05.147 回答