绑定多个线程到多个CPU?

Bind multiple threads to multiple CPU?

我有多个线程正在访问相同的数据,让它们线程安全太痛苦了。因此,他们现在被迫 运行 仅在一个 CPU 核心上使用 CPU affinity 并且只有一个线程可以同时 运行ning。

我想知道是否可以将这些线程分组并让它们一起浮动到其他 CPU 核心?这样一来,我就不用为这些线程腾出一个CPU核了。

这是基于Unix/BSD平台

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

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

i++

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

你需要抛弃这种方法。可能,您应该使用全局锁来控制对共享可变状态的访问。这让所有这些担忧都消失了,而且实施起来相当简单。

要么使代码线程安全,要么只使用一个线程。

最简单的解决方案可能是 "one big lock" 模型。使用此模型,一个锁可以保护线程之间共享的所有数据,而不是以线程安全的方式处理。线程一开始总是持有锁。然后您确定线程可以阻塞的所有点并在该阻塞期间释放锁。