使用pthreads以挂起模式创建线程

时间:2011-10-31 12:48:19

标签: c linux winapi pthreads

在Win32中,您可以使用带有CREATE_SUSPENDED的 dwCreationFlags 参数以挂起模式创建线程。我正在寻找与pthreads类似的功能。请注意,我不希望在运行它之后暂停该线程,然后使用条件变量暂停它,但实际上是在挂起模式下创建它,然后稍后启动它。

使用这种方法的优点是我可以在运行之前为该线程分配一些属性。例如,在启动之前将其绑定到某个核心,这比首次启动时更有效,然后将其分配给核心,因为它可能会从一个核心移动到另一个核心。

如果不可能,我们至少可以在调用 pthread_create 时将线程绑定到核心吗?

3 个答案:

答案 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)

pthread属性上当前没有标志来创建处于挂起状态的线程。

您可能需要在创建后手动暂停它。

要实施暂停/恢复,您可以查看here