質問

次のコードがあるとします:

while(TRUE) {
  pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
  pthread_create(thread, NULL, someFunction, someArgument);
  pthread_detach(*thread);
  sleep(10);
}

デタッチされたスレッドはmallocによって割り当てられたメモリを解放しますか、それとも私が今しなければならないことですか?

役に立ちましたか?

解決

いいえ。 pthread_create()には、渡された thread ポインターが動的に割り当てられたことを知る方法がありません。 pthreadは、この値を内部的に使用しません。新しいスレッドIDを呼び出し元に返すだけです。その値を動的に割り当てる必要はありません。代わりにローカル変数のアドレスを渡すことができます:

pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);

他のヒント

自分でメモリを解放する必要があります。ヒープではなく、スタックにpthread_t変数を単に割り当てることが望ましいでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top