pthread_create没有单独的功能

时间:2018-06-09 12:24:59

标签: c++ pthreads

我有一个pthread_t数组,它们是通过pthread_create在for循环中启动的。

我有大量预先声明的变量,对于线程的内部工作很重要。我希望有一个匿名内部函数作为pthread_create的启动例程,如此:

pthread_create(threads[i], NULL, 

     { inner function here }

, NULL);

我知道C ++特别没有这个,所以我想也许lambdas可能会有所帮助,或者也许有人有另一个想法,所以我不必创建一个单独的方法并交出之前的所有变量{ {1}}。

1 个答案:

答案 0 :(得分:3)

如果lambda表达式没有捕获任何内容,the lambda object can be converted to a C function pointer,那么这样的东西就可以了:

pthread_t thr;
pthread_create (&thr, NULL,
                [] (void *closure) -> void * {
                  return nullptr;
                }, NULL);

需要void *的显式返回类型,因为推断的返回类型通常不正确。由于您无法使用捕获,因此需要使用closure参数传递指向对象的指针(并使用static_cast将其转换为lambda中的正确类型),并且终身使用原因,可能需要在堆上分配它。

(另请注意pthreads[i]作为pthread_create的第一个元素看起来不正确,它是用于返回部分结果的指针,即新线程的ID。)< / p>