将多个线程绑定到多个CPU?

时间:2015-06-05 19:28:55

标签: multithreading process operating-system scheduler

我有多个线程正在访问相同的数据,并且使它们的线程安全太麻烦了。因此,现在它们只能使用CPU亲和性在一个CPU内核上运行,并且只能同时运行一个线程。

我想知道是否可以对这些线程进行分组并让它们一起浮动到其他CPU内核?通过这种方式,我不必为这些线程节省一个CPU核心。

这是基于Unix / BSD平台

2 个答案:

答案 0 :(得分:2)

在Windows上无法执行此操作。我不知道Unix / Linux,但我怀疑它是否可能。

请注意,这不会使您的系统线程安全。即使在单处理器机器上,线程安全也是一个问题。

i++

不是原子的。两个线程都可以读取i,然后计算i+1,然后写i。这导致更新丢失。

你需要抛弃这种方法。也许,您应该使用围绕访问共享可变状态的全局锁定。这使得所有这些问题都消失了,并且实施起来相当简单。

答案 1 :(得分:1)

使代码线程安全或只使用一个线程。

最简单的解决方案可能是一个大锁#34;模型。使用此模型,一个锁可以保护线程之间共享的所有数据,而不是以线程安全的方式处理。线程始终保持锁定。然后,您可以识别线程可以阻塞的所有点,并在该块中释放锁定。