c# - 你如何在同一时刻启动 2 个线程?

标签 c# multithreading unit-testing race-condition

对于我正在编写的测试用例,我想同时启动 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/

相关文章:

c# - 尝试克隆 Entity Framework 对象时违反了多重性约束

multithreading - Perl 模块 ForkManager 不工作

javascript - 测试 React 函数是用 Jest 调用的

unit-testing - 可测试的辅助方法的访问修饰符是什么?

Java 单元测试 - 常量字段与 setUp()

c# - 无法使用 HttpWebRequest/HttpWebResponse 下载 html 字符串

c# - 我可以从服务器上运行的 Web API 应用程序将文件写入服务器计算机上的文件夹吗?

c# - 可被 n 整除的数的算法

c# - 不是表单时使用 InvokeRequired

ios - 如何在 Swift 中使用 NSURLSession downloadTask 顺序下载多个文件