我在我的应用程序中使用ffmpeg,它在内部产生了很多线程。然而,我希望我的应用程序具有实时语义,它本身有一个cpu核心。因此,基本上,我需要一种方法来禁用调度ffmpeg产生的线程到一个核心,并设置我的主线程与该核心的亲和力。
这个是可能的吗?
例如:
main()
{
struct sched_param param;
param.sched_priority = 95;
sched_setscheduler(getpid(), SCHED_FIFO, ¶m);
int core_id = 0;
// TODO: Remove core_id from cpuset for all future thread default affinities.
pthread_t ffmpeg_thread;
pthread_create(&ffmpeg_thread, NULL, run_ffmpeg, NULL);
pthread_t rt_thread;
pthread_create(&rt_thread, NULL, run_rt, NULL);
cpu_set_t rt_cpuset;
CPU_ZERO(&rt_cpuset);
CPU_SET(core_id, &rt_cpuset);
pthread_setaffinity_np(rt_thread, sizeof(rt_cpuset), &rt_cpuset);
pthread_join(ffmpeg_thread, NULL);
pthread_join(rt_threadm, NULL);
}发布于 2015-11-04 09:17:57
线程从调用线程继承它们的亲缘关系。
请参阅创建
特定于Linux的详细信息,新线程继承调用线程的功能集(参见功能(7))和CPU关联掩码(参见sched_setaffinity(2))的副本。
因此,只要根据需要为两个线程设置关联,就会导致任何额外生成的线程继承它们的亲缘关系。能做我想做的事。
https://stackoverflow.com/questions/33516163
复制相似问题