【问题标题】:Linux Option of SwitchTothread WindowsSwitchTothread Windows 的 Linux 选项
【发布时间】: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


    【解决方案1】:

    那就是pthread_yield()

    不同之处在于SwitchToThread() 在发生线程切换时返回非零值,否则返回零值,而pthread_yield() 在成功时返回零值,在错误时返回非零值(目前在 Linux 上总是成功)。

    【讨论】:

    • 请注意Linux中的yield结果从一个内核版本到下一个内核版本是不一致的,不推荐使用,并且经常导致性能非常差,因为你可能直到空闲时才能运行/整个系统中所有其他进程的批处理优先级线程都已运行。
    • @Zan 那么它的选择是什么?
    • @CrazyC:使用条件、互斥锁或信号量,而不是随机让步给其他线程。
    • SwitchToThread 主要用于优先级反转。和 pthread_yield 做类似的事情。所以使用同步对象不能解决目的。
    • yield() 的结果因内核而异,但这只是因为线程调度的整体性质各不相同。如果您的应用程序依赖于特定类型的线程调度范例,那么无论您是否使用 yield,它都会在 Linux 内核中出现问题。此外,yield()SwitchToThread() 行为的更大影响因素是主机系统上的内核数。通常在四核系统上,产生当前线程什么都不做,与让操作系统调度程序自行决定相比,甚至可能会降低性能。
    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 2010-11-27
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多