私はこのようなことをしたい:
void *do_work_son(void *data)
{
mystruct *d = (mystruct*)data;
while(true)
{
// d->whatever is corrupt
}
}
void start_thread(pthread_t *mt)
{
mystruct data = ...;
pthread_create(&(*mt), NULL, do_work_son, (void *)&data);
}
int main()
{
pthread mt;
start_thread(&mt);
// do more stuff here
pthread_join(mt, NULL);
}
アイデアは、いくつかのスレッドを生み出し、より多くの作業を続けmain
ます...そして、より多くの作業を行ったら、スレッドが終了するのを待ちます。
正常にコンパイルされますが、data
内部でアクセスされると構造体が破損しますdo_work_son
。これは、join inを呼び出しているにもかかわらず、スレッドが終了しているためだと思いますmain
。pthread_{create,join}
両方の呼び出しをstart_threadに移動すると、正常に機能しますが、メイン関数がwhileループによってブロックされます。私はそれをこのようにすることに夢中ですか?