禁用所有线程默认值

时间:2015-11-04 07:36:34

标签: c++ c linux pthreads affinity

我在我的应用程序中使用ffmpeg,它在内部产生了很多线程。但是,我希望我的具有实时语义的应用程序有一个自己的cpu核心。所以基本上我需要一种方法来禁用ffmpeg生成的线程到核心的调度,并设置我的主线程与该核心的亲和力。

这可能吗?

e.g。

main()
{
    struct sched_param param;
    param.sched_priority = 95;
    sched_setscheduler(getpid(), SCHED_FIFO, &param);

    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);
}

1 个答案:

答案 0 :(得分:0)

线程从调用线程继承它们的亲和力。

请参阅pthread_create

  

特定于Linux的详细信息          新线程继承了调用线程的功能的副本          sets(参见capabilities(7))和CPU affinity mask(参见          了sched_setaffinity(2))。

因此,只需根据需要设置两个线程的亲缘关系将导致任何额外生成的线程继承其关联。这将完全符合我的要求。