2012-09-17 49 views
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下它按預期工作。pthread_cancel不能在solaris下工作

+0

'pthread_cancel()'返回什麼值? – hmjd

+0

你有[閱讀手冊](http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_cancel.3.html)並檢查了取消狀態和目標線程的類型嗎? –

+0

@hmjd它是零 –

回答

4

每個POSIX,printf(和所有stdio)可能是一個取消點。它不是必須的。我懷疑Solaris不會選擇一個。你在這裏試過另一個功能,如sleep嗎?

如果你真的需要printf是可以取消的,你可能需要實現自己的printf樣的功能爲dprintf的包裝,但不會這麼好,如果你依賴於內置鎖定功能stdio ..

+0

謝謝,它確實如此。 –