私のC++アプリケーションでpthreadsに問題があります。Pthread_create()の開始ルーチンパラメータが正しくありません。
int main(){
...
for(i=0; i<numberOfThreads; i++){
arg[0]=i;
pthread_create(&tidVec[i], NULL, &thread_body, (void*) arg);
cout << "tidVec[" << i <<"]: " << tidVec[i] << " arg[0]: " << arg[0] << endl;
}
...
}
そして、私のthread_body機能で:私は私の主な機能には
これに
void * thread_body(void* arg){
...
int* a = (int*)arg;
cout << "tid: " << pthread_self() << " no.thread: " << a[0] << endl;
...
}
出力(例えば= 2 numberOfThreadsとは)ように見える:
tidVec [0]:2932403008 arg [0]:0
tidVec [1]:2924010304のarg [0]:1
TID:2924010304 no.thread:1
TID:2932403008 no.thread:より一般的な場合には1
とnumberOfThreads = n、no.threadはすべてのスレッドに対してn-1に等しい。 私は理由を理解するのを助けてくれますか?スタートルーチンをどのように使用するのか分からないことがありますか?
ありがとうございます。あなたがここにすべてのスレッドに同じ場所(arg[0]
)のアドレスを渡すので、
pthreadsの代わりにC++ 11と[std :: thread](http://en.cppreference.com/w/cpp/thread/thread)を使用することを検討してください。 –