私は C++ と pthreads を使用しており、pthread が作成された順序を調べる必要があります。どの pthread が最初に作成されたか、2 番目に作成されたかなどを示す一意の整数が必要です。
私の最初のアイデアは を使用することでしたがpthread_self()
、この関数はかなり巨大な乱数のような一意の ID を返します。
2 番目のアイデアは、ループ内の create メソッドで使用していたカウンターを渡すことでした。
pthread_t pthreads[pthreadsNum];
for(int i = 0; i < pthreadsNum; i++){
if (pthread_create(&pthreads[i], NULL, process, (void *)&i) != 0){
cerr << "Error in pthread creation" << endl;
return PTHREAD_CREATION_FAILED;
}
}
ただし、これも機能しません。私の関数process
では、カウンターの値を出力しようとしましたi
が、混乱が生じます。一部の pthread がそれとカオス ルールを受信している間に、どうやらカウンターが更新されるようです。
void *process(void* arg_ptr)
{
int i = *((int*)arg_ptr);
cout << i << endl;
//rest of code
}
私にランダムな出力を与える: 3 3 4 3 そして、この同じランダムな出力の他の組み合わせ。
結論として、私は次の質問があります。
1 - 私は何を間違っていますか?
2 - 安全かつ効率的にカウンターを通過するにはどうすればよいですか?
3 - pthreads が作成された順序を取得する別の解決策はありますか?
助けてくれてありがとう:S