-1

我在去块算法上使用了多线程。没有线程,它运行 30 毫秒。有 40 个线程,它运行 40 毫秒左右。但是,根据我的观察,WaitForSingleObject 中使用了 40ms 中的 20ms。

我想知道,WaitForSingleObject 是否有任何解决方法。

编辑:我的问题包括两个循环。第二个依赖第一个的结果。我为每个循环使用四个线程。每个线程运行该循环内容的四分之一。

在开始第二个循环的下 4 个线程之前,我需要等待第一个循环的四个线程完成。

但我觉得 WaitForSingleObject 需要太多时间。最慢的线程只需要 1 到 2 毫秒。但在我的录音中,WaitFor singleObject 采取了一些相同的方式。

没有线程,它的速度几乎相同,有时甚至更慢。所以,就我而言,线程确实有助于加速,但是 WaitForSingleObject 占用了所有节省的时间,并使程序像一个线程一样慢。

4

1 回答 1

0

EnterCriticalSection 和 LeaveCriticalSection 是更轻量级的同步原语。您应该尽可能选择这些锁而不是其他锁。

编辑(在有问题的编辑之后):您可以使用Windows API Barrier,它的性能可能与 EnterCriticalSection 一样好

于 2013-06-09T07:18:28.110 回答