我的程序有一个后台线程,用于填充和交换双缓冲区实现的后台缓冲区。 主线程使用前端缓冲区发送数据。问题是当我运行程序时,主线程平均获得更多的处理时间。我想要相反的行为,因为填充后台缓冲区是一个更耗时的过程,然后处理并向客户端发送数据。
如何在Linux上使用C POSIX pthreads实现这一目标?
答案 0 :(得分:6)
根据我的经验,如果在没有优先级的情况下,你的主线程会获得更多的CPU,那么这意味着以下两点之一:
它实际上需要额外的时间,与您的期望相反,或者
背景线程正在挨饿,可能是由于锁定争用
更改优先级不会解决其中任何一个问题。
答案 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_param的sched_priority字段中设置优先级。
答案 2 :(得分:1)
您应该查看pthread_attr_t
结构。它作为参数传递给pthread_create
函数。它用于更改线程属性,可以帮助您解决问题。
如果无法解决问题,则必须使用互斥锁来防止主线程在其他线程交换之前访问缓冲区。
答案 3 :(得分:1)
使用pthread_setschedprio(pthread_t thread, int priority)
。但正如在其他情况下(setschedparam或使用pthread_attr_t),如果你想改变优先级(如不错的实用程序),你的进程应该在root下启动。