对于我正在编写的测试用例,我想同时启动 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);
}
最佳答案
您无法控制它,并且对于一个处理单元,一次只能发生一件事。 你可以做的是使用 Barriers将线程同步到逻辑时间的位置。
关于c# - 你如何在同一时刻启动 2 个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18214186/