1
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>

char a[]="Hello";

void * thread_body(void * param) {
        while(1)
                printf("%s\n", param);
}

int main(int argc,  char *argv[]) {
        pthread_t threadHello;
        int code;
        pthread_create(&threadHello,  NULL,  thread_body,  a);
        pthread_cancel(threadHello);
        pthread_exit(0);
}

当我在 Solaris 10 (SunOS 5.10) 下编译和运行它时,它并没有停止。但在 Linux 下,它按预期工作。

4

1 回答 1

4

根据 POSIX,printf(以及所有 stdio)可能是一个取消点。它不是必需的。我怀疑 Solaris 只是没有选择使其成为一体。你试过像sleep这里这样的另一个功能吗?

如果你真的需要printf被取消,你可能需要实现你自己printf的类似函数作为包装器dprintf,但如果你依赖于 stdio 的内置锁定功能,那将不会那么好。

于 2012-09-17T11:33:30.763 回答