【发布时间】:2013-01-16 03:02:18
【问题描述】:
Windows 提供了一个函数 SwitchTothread,它可以运行/调度较低优先级的线程。有人知道Linux中的选项吗? http://msdn.microsoft.com/en-us/library/windows/desktop/ms686352%28v=vs.85%29.aspx
【问题讨论】:
标签: c++ linux windows linux-kernel
Windows 提供了一个函数 SwitchTothread,它可以运行/调度较低优先级的线程。有人知道Linux中的选项吗? http://msdn.microsoft.com/en-us/library/windows/desktop/ms686352%28v=vs.85%29.aspx
【问题讨论】:
标签: c++ linux windows linux-kernel
那就是pthread_yield()。
不同之处在于SwitchToThread() 在发生线程切换时返回非零值,否则返回零值,而pthread_yield() 在成功时返回零值,在错误时返回非零值(目前在 Linux 上总是成功)。
【讨论】:
yield() 的结果因内核而异,但这只是因为线程调度的整体性质各不相同。如果您的应用程序依赖于特定类型的线程调度范例,那么无论您是否使用 yield,它都会在 Linux 内核中出现问题。此外,yield() 和SwitchToThread() 行为的更大影响因素是主机系统上的内核数。通常在四核系统上,产生当前线程什么都不做,与让操作系统调度程序自行决定相比,甚至可能会降低性能。