这是 pthread_setschedparam 的签名:
#include <pthread.h>
int pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param);
这段代码是否会导致意外行为:
void schedule(const thread &t, int policy, int priority) {
sched_param params;
params.sched_priority = priority;
pthread_setschedparam(t.native_handle(), policy, ¶ms);
}
目前还不清楚 params 的范围是否需要比单独的函数调用更广泛。当我看到一个接受指针的函数时,它暗示(至少对我而言)它要求拥有它。这个签名是不是设计得不好? “sched_params params”应该存在于堆上吗?它是否需要超过线程才能保持有效?可以删除吗?
我不知道。
谢谢!
最佳答案
pthread_setschedparam
为给定线程设置调度策略。调用后参数不必处于事件状态。
如果最后一个参数的生命周期很重要(如您所说,如果 pthread_setschedparam
拥有它的所有权),那么它会被明确记录下来。但它不在 POSIX 文档 pthread_setschedparam 中。
它采用指针(而不是值)的可能原因是传递指针比传递 struct
更便宜。
关于c - pthread 函数参数的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54027550/