1

IOS でマルチスレッド プロジェクトに取り組んでいます。私のプロジェクトでは、pthread の参加が失敗することがあります。

pthread_join(thread_id, NULL) == 0

注: これは IOS でのみ発生し、ランダムです。結合操作が失敗する理由は何ですか。

4

2 に答える 2

0

私は同じ問題を抱えていましたが、簡単な解決策を見つけました: 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);
}
于 2013-10-03T10:44:39.257 に答える