这是 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, &params);
}

目前还不清楚 params 的范围是否需要比单独的函数调用更广泛。当我看到一个接受指针的函数时,它暗示(至少对我而言)它要求拥有它。这个签名是不是设计得不好? “sched_pa​​rams params”应该存在于堆上吗?它是否需要超过线程才能保持有效?可以删除吗?

我不知道。

谢谢!

最佳答案

pthread_setschedparam 为给定线程设置调度策略。调用后参数不必处于事件状态。

如果最后一个参数的生命周期很重要(如您所说,如果 pthread_setschedparam 拥有它的所有权),那么它会被明确记录下来。但它不在 POSIX 文档 pthread_setschedparam 中。

它采用指针(而不是值)的可能原因是传递指针比传递 struct 更便宜。

关于c - pthread 函数参数的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54027550/

10-16 11:11