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

Multithreading 将多个线程绑定到多个CPU?,multithreading,process,operating-system,scheduler,Multithreading,Process,Operating System,Scheduler,我有多个线程正在访问相同的数据,要使它们成为线程安全的,这太痛苦了。因此,它们现在被强制使用CPU关联仅在一个CPU内核上运行,并且只能同时运行一个线程 我想知道是否有可能将这些线程分组,让它们一起浮动到其他CPU核心上?这样,我就不必为这些线程留出一个CPU内核 这是基于Unix/BSD平台的在Windows上无法做到这一点。我不知道Unix/Linux,但我怀疑它是否可能 请注意,这不会使系统线程安全。即使在单处理器机器上,线程安全也是一个问题 i++ 它不是原子的。两个线程都可以读取i,

我有多个线程正在访问相同的数据,要使它们成为线程安全的,这太痛苦了。因此,它们现在被强制使用CPU关联仅在一个CPU内核上运行,并且只能同时运行一个线程

我想知道是否有可能将这些线程分组,让它们一起浮动到其他CPU核心上?这样,我就不必为这些线程留出一个CPU内核


这是基于Unix/BSD平台的

在Windows上无法做到这一点。我不知道Unix/Linux,但我怀疑它是否可能

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

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


你需要抛弃这种方法。很可能,您应该使用一个全局锁来控制对共享可变状态的访问。这就消除了所有这些顾虑,实现起来相当简单。

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


最简单的解决方案可能是“一个大锁”模型。在这个模型中,一个锁保护线程之间共享的所有数据,而不是以线程安全的方式处理的数据。螺纹开始时始终保持锁紧。然后确定线程可以阻塞的所有点,并在阻塞期间释放锁。

实际上没有多个线程,因为一次只能运行一个线程。为什么不以正确的方式运行,或者摆脱线程?奇怪的是,让它们在一个CPU上运行仅仅是因为系统限制,或者是因为您试图避免锁定减速?此外,您可能希望发布您正在做的需要您的解决方案的事情。您可能会对一两个答案感到惊讶,这些答案可以解决根本问题,而不是您现在正在处理的次要问题。@MichaeldOrganger,因为我试图避免锁定。@stark,如果我能做到,我希望如此。不过,正在寻找更简单的解决方案。线程之间不受控制的上下文切换就是这种情况。我确保切换只能发生在我的代码的特定行,而不是在I++指令之间。如何控制上下文切换?这将需要冻结所有其他线程,这将使您的调度解决方案变得不必要。@ARH听起来您有很多事情没有告诉我们您的代码是如何工作的。@DavidSchwartz-是的。OP的要求和实施有些“不对劲”,但没有足够的信息来说明它是什么:(