2014-05-25 137 views
0

我只是将线程添加到我多年来一直在开发的大型应用程序中。它用C语言编写,可在Mac和Linux上运行。这个问题是关于OS X,10.8.2或10.6.8。在Mac OS X上执行线程,强制执行多个CPU

问题:我看到程序按照我的预期打开两个线程。然而,显然两个线程都运行在同一个CPU上,或者至少,我从来没有得到超过100%的CPU分配给该程序。这几乎破坏了线程的全部目的。

我使用了相当数量的互斥锁,如果这很重要的话。

如何强制操作系统在不同CPU的100%运行每个线程? (此机器上有8个CPU。)

+1

也许你的线程根本不会做任何会导致大负载的东西?也许你正在睡觉或等待其他事件过多(使用过多的互斥体可能意味着线程化设计不是最好的)? –

+0

你的目标有缺陷。 –

+0

Joachim Pileborg:谢谢你的回答。这两个线程都做了很多工作。没有睡觉。我的感觉是,等待互斥的时间百分比非常小。 – rfermat

回答

2

互斥体在这里可能很重要。将其设置为“记录所有线程状态”后,打开仪器并在程序上运行时间剖析仪。这将让你看到你的线程阻塞在哪里等待(可能是互斥体)而不是运行。

+0

感谢您的建议。我从来没有听说过“时间轮廓仪”或“乐器”。显然它是Xcode 4的一部分;我有3.2.6。 – rfermat

+0

3.2.6也应该有。只需打开乐器并观看。这是平台上的*主要*性能工具,您需要最终了解它。 –

0

多个运行线程将并发只要它们在不同的核心上执行 - 每个核心在每个类Unix操作系统中都有自己的调度程序实例。 在单独的CPU裸片上事情很少:如果事实上,在同一裸片的不同核上运行的线程之间共享资源是有益的。

+0

感谢您的回复,但我不明白你的意思。这是一个错字:“在单独的CPU死亡事情很少”?我假设你的意思是“独立的CPU很少”,因为线程将在不同的内核上。但是我似乎让两个线程在同一个处理器上交替运行,没有并行性。 – rfermat

+0

@ rfermat CPU芯片是物理硅。芯片可能有一个或多个核心,同一芯片上的核心通常共享更高级别的高速缓存。我们使用'core'和'die'这样的特定术语来避免混淆,因为不同的工具对'processor'和'CPU'有不同的方法。另见http://superuser.com/questions/324284/what-is-meant-by-the-terms-cpu-core-die-and-package – mikemaccana