C linux pthread线程优先级

时间:2011-03-21 07:30:24

标签: c linux multithreading pthreads thread-priority

我的程序有一个后台线程,用于填充和交换双缓冲区实现的后台缓冲区。 主线程使用前端缓冲区发送数据。问题是当我运行程序时,主线程平均获得更多的处理时间。我想要相反的行为,因为填充后台缓冲区是一个更耗时的过程,然后处理并向客户端发送数据。

如何在Linux上使用C POSIX pthreads实现这一目标?

4 个答案:

答案 0 :(得分:6)

根据我的经验,如果在没有优先级的情况下,你的主线程会获得更多的CPU,那么这意味着以下两点之一:

  1. 它实际上需要额外的时间,与您的期望相反,或者

  2. 背景线程正在挨饿,可能是由于锁定争用

  3. 更改优先级不会解决其中任何一个问题。

答案 1 :(得分:3)

看看pthread_setschedparam() - > http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setschedparam.3.html

pthread_setschedparam(pthread_t thread, int policy,
                         const struct sched_param *param);

您可以在sched_pa​​ram的sched_priority字段中设置优先级。

答案 2 :(得分:1)

您应该查看pthread_attr_t结构。它作为参数传递给pthread_create函数。它用于更改线程属性,可以帮助您解决问题。

如果无法解决问题,则必须使用互斥锁来防止主线程在其他线程交换之前访问缓冲区。

答案 3 :(得分:1)

使用pthread_setschedprio(pthread_t thread, int priority)。但正如在其他情况下(setschedparam或使用pthread_attr_t),如果你想改变优先级(如不错的实用程序),你的进程应该在root下启动。