我在创建分离的线程时遇到问题。这是我写的代码:

void* testFunction() {

    pthread_attr_t attr;
    int chk,rc;

pthread_attr_init(&attr);
printf("thread_attr_init: %d\n",rc);

pthread_attr_getdetachstate(&attr, &chk);
printf("thread_attr_getdetachedstate: %d\n",rc);

if(chk == PTHREAD_CREATE_DETACHED )
    printf("Detached\n");
else if (chk == PTHREAD_CREATE_JOINABLE)
    printf("Joinable\n");

return NULL;
}


int main (int argc, const char * argv[]) {

pthread_t thread1;
pthread_attr_t attr;

int rc;

rc = pthread_attr_init(&attr);

printf("attr_init: %d\n",rc);
rc = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
printf("attr_setdetachedstate: %d\n",rc);

rc = pthread_create(&thread1, &attr, testFunction, NULL);
printf("attr_create: %d\n",rc);

sleep(4);
pthread_cancel(thread1);

return 0;
}

问题是 testFunction() 总是打印“Joinable”。谁能告诉我哪里出错了?

最佳答案

您的 testFunction 没有检查有关当前线程的任何内容,而只是检查您刚刚创建的全新属性对象的初始分离标志。此外,在 POSIX 线程 API 中,完全不可能恢复创建线程时使用的属性或确定线程是否已分离。你只需要相信实现的行为符合要求,就像你必须相信,如果 malloc(100) 返回一个非空指针,它指向一个可以存储至少 100 个字节的位置。这就是 C 的本质。

关于c - Pthread_create 作为分离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6202762/

10-11 22:54