IOS でマルチスレッド プロジェクトに取り組んでいます。私のプロジェクトでは、pthread の参加が失敗することがあります。
pthread_join(thread_id, NULL) == 0
注: これは IOS でのみ発生し、ランダムです。結合操作が失敗する理由は何ですか。
私は同じ問題を抱えていましたが、簡単な解決策を見つけました: pthread_detach() を呼び出さないでください。ドキュメントによると、pthread_detach はトレッドを結合できない状態にするため、pthread_join は EINVAL で失敗します。
ソースコードは次のようになります。
pthread_t thread;
pthread_attr_t threadAttr;
bool run = true;
void *runFunc(void *p) {
while (run) { ... }
}
- (void)testThread {
int status = pthread_attr_init(&threadAttr);
NSLog(@"pthread_attr_init status: %d", status);
status = pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_JOINABLE);
NSLog(@"pthread_attr_setdetachstate status: %d", status);
status = pthread_create(&thread, &threadAttr, &runFunc, (__bridge void *)self);
NSLog(@"pthread_create status: %d", status);
/* let the thread run ... */
run = false;
status = pthread_join(thread, NULL);
NSLog(@"pthread_join status: %d == %d, ?", status, EINVAL);
}