繁体   English   中英

C linux pthread线程优先级

[英]C linux pthread thread priority

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

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

根据我的经验,如果在没有优先级的情况下你的主线程获得更多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_attr_t结构。 它作为参数传递给pthread_create函数。 它用于更改线程属性,可以帮助您解决问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM