簡體   English   中英

pthread_create沒有單獨的功能

[英]pthread_create without separate function

我有一個pthread_t數組,它們通過pthread_create在for循環中啟動。

我有大量預先聲明的變量,對於線程的內部工作很重要。 我想有一個匿名內部函數作為pthread_create啟動例程,如下所示:

pthread_create(threads[i], NULL, 

     { inner function here }

, NULL);

我知道C ++特別沒有這個,所以我想也許lambdas可能有幫助,或者有人有另一個想法,所以我不必創建一個單獨的方法並交出pthread_create之前的所有變量。

如果lambda表達式沒有捕獲任何東西, lambda對象可以轉換為C函數指針 ,所以像這樣的東西將起作用:

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

void *的顯式返回類型是必需的,因為推斷的返回類型通常不正確。 由於您無法使用捕獲,因此需要使用closure參數傳遞指向對象的指針(並使用static_cast將其static_cast轉換為lambda中的正確類型),並且出於實際原因,可能需要分配在堆上。

(另請注意,作為pthread_create的第一個元素的pthreads[i]看起來不正確,它是一個用於返回結果的一部分的指針,即新線程的ID。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM