对于我正在编写的测试用例,我想在完全相同的时间启动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);
}
答案 0 :(得分:4)
你无法控制它,只有一个处理单元,一次只能发生一件事。 您可以做的是使用Barriers在一个逻辑时间内将线程同步到一个位置。
答案 1 :(得分:3)
您无法在同一时间启动线程。您无法在单处理器计算机上执行此操作。并且您无法在多处理器计算机上强制执行它。
所以继续测试很多次。并考虑并行性和多线程问题进行代码审查。