有一個功能auto check = [](void * threadIn)->bool
。 我試圖創建3個工作線程,每個線程都使用參數int i
執行check
並返回布爾結果。如何在多線程中使用Lambda表達式?
我排除了多線程之外的部分代碼。如果三個線程的返回結果爲真,我想將bool valid
設置爲true。
這是我的代碼。
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <fstream>
#include <string>
#ifdef _WIN32
# include <windows.h>
#endif
#ifdef linux
# include <unistd.h>
#endif
using namespace std;
int a[6][6];
#define forever for(;;)
void main()
{
forever
{
bool valid;
/* set input from file and set up the array */
auto check = [](void * threadIn)->bool
{
bool flag=false;
int seq = * (int *) threadIn;
switch (seq){/*...*/}
return !flag;
};
pthread_t threads[3];
int rc;
int i, threadids[3];
for (i = 0; i < 3; i++){
threadids[i] = i;
cout << "main(): creating Thread " << i << endl;
rc = pthread_create(&threads[i], NULL, check, (void *)&threadids[i+1]);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
cout << "main(): program exiting." << endl;
pthread_exit(NULL);
valid = (check(1) && check(2) && check(3));
}
}
有一些提到lambda表達式的錯誤消息。我不熟悉Lambda和Multi線程的組合。
任何人都可以幫我解決這個問題嗎?謝謝。
爲什麼不使用'std :: thread'? – 2015-02-07 03:47:00
「有一些提到lambda表達式的錯誤消息」 - 它們是超級祕密/只是眼睛,還是你認爲可能顯示錯誤*逐字*以及構建工具創建錯誤會對他有幫助? – WhozCraig 2015-02-07 03:50:45