5

惠普手册页(链接)说

“默认情况下,新线程的调度策略和优先级继承自创建线程——也就是说,默认情况下,pthread_create(3) 例程会忽略指定线程属性对象中设置的调度策略和优先级。因此,要创建受指定线程属性对象中设置的调度策略和优先级约束的线程,在调用 pthread_create(3) 之前,您的程序必须使用 pthread_attr_setinheritsched(3) 例程将继承线程
属性对象的调度属性设置为 PTHREAD_EXPLICIT_SCHED。

这适用于 Linux posix 线程(NPTL pthread)吗?

如果不是,影响使用 pthread_create() 创建的线程的优先级和调度策略的因素是什么?

4

1 回答 1

5

这里

在继承中可以指定以下值:

PTHREAD_INHERIT_SCHED 使用 attr 创建的线程从创建线程继承调度属性;attr 中的调度属性被忽略。

PTHREAD_EXPLICIT_SCHED 使用 attr 创建的线程从属性对象指定的值中获取其调度属性。

在新初始化的线程属性对象中继承调度程序属性的默认设置是 PTHREAD_INHERIT_SCHED。

因此,似乎与问题中描述的行为相同。

我实际上会认为这样的默认值可以由标准定义(尽管我承认没有太多的经验),但是看看线程调度属性部分的最后一行:

(...) 其他调度属性的默认值是实现定义的。

于 2014-01-28T08:02:07.310 回答