在Win32中,您可以使用带有CREATE_SUSPENDED的 dwCreationFlags 参数以挂起模式创建线程。我正在寻找与pthreads类似的功能。请注意,我不希望在运行它之后暂停该线程,然后使用条件变量暂停它,但实际上是在挂起模式下创建它,然后稍后启动它。
使用这种方法的优点是我可以在运行之前为该线程分配一些属性。例如,在启动之前将其绑定到某个核心,这比首次启动时更有效,然后将其分配给核心,因为它可能会从一个核心移动到另一个核心。
如果不可能,我们至少可以在调用 pthread_create 时将线程绑定到核心吗?
答案 0 :(得分:6)
如果要从一开始就将线程绑定到CPU,可以使用带有pthread_create
参数的pthread_attr_t
形式。 Linux支持一个特殊属性pthread_attr_setaffinity_np,它允许将线程绑定到某个CPU集。不要将此与需要已经运行的线程的pthread_setaffinity_np
混淆。
行动计划是这样的:
// create generic attribute set
pthread_attr_t attr;
pthread_attr_init(&attr);
// enhance with CPU set
pthread_attr_setaffinity_np(&attr, ...cpuset-args);
// create thread with right attributes including CPU set
pthread_t thread;
pthread_create(&thread, &attr, ...);
// viola, thread runns on given CPU-set, cleanup
pthread_attr_destroy(&attr);
答案 1 :(得分:0)
初始挂起状态或核心绑定将由pthread_create的第二个参数中给出的属性处理,其中的选项记录在pthread_attr_init
的联机帮助页中。我没有找到相关的标志,所以目前似乎不可能。您可以针对Linux pthreads实现提交错误。
答案 2 :(得分:0)