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 がそれを 1 つにすることを選択していないのではないかと考えています。ここのような別の機能を試しsleepましたか?

本当にprintfキャンセル可能にする必要がある場合は、おそらく独自の のprintfような関数を のラッパーとして実装する必要がありdprintfますが、stdio の組み込みロック機能に依存している場合はうまく機能しません。

于 2012-09-17T11:33:30.763 に答える