3

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

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

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

4

2 に答える 2

10

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

pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
于 2008-09-25T20:43:08.870 に答える
1

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

于 2008-09-25T21:00:14.213 に答える