C linux pthread线程优先

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

我怎样才能在Linux上用C POSIX pthreads来实现呢?

Solutions Collecting From Web of "C linux pthread线程优先"

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

  1. 它实际上需要额外的时间,违背你的期望,或

  2. 后台线程正在被饿死,也许是由于锁定争用

改变优先次序并不能解决这两个问题。

看看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字段中设置优先级。

使用pthread_setschedprio(pthread_t thread, int priority) 。 但在其他情况下(setschedparam或使用pthread_attr_t时),如果要更改优先级(如nice utility),则应该在根目录下启动进程。

你应该看看pthread_attr_t结构体。 它作为参数传递给pthread_create函数。 它用来改变线程属性,并可以帮助你解决你的问题。

如果你不能解决它,你将不得不使用一个互斥体来阻止你的主线程在你的其他线程交换之前访问你的缓冲区。