pthread_cancel don';我不能在solaris下工作 #包括 #包括 #包括 #包括 字符a[]=“你好”; void*螺纹体(void*参数){ 而(1) printf(“%s\n”,参数); } int main(int argc,char*argv[]){ pthread\u t threadHello; int代码; pthread_create(&threadHello,NULL,thread_body,a); pthread_cancel(threadHello); pthread_退出(0); }
当我在Solaris 10(SunOS 5.10)下编译并运行它时,它不会停止。但是在Linux下它可以正常工作。根据POSIX,pthread_cancel don';我不能在solaris下工作 #包括 #包括 #包括 #包括 字符a[]=“你好”; void*螺纹体(void*参数){ 而(1) printf(“%s\n”,参数); } int main(int argc,char*argv[]){ pthread\u t threadHello; int代码; pthread_create(&threadHello,NULL,thread_body,a); pthread_cancel(threadHello); pthread_退出(0); },c,pthreads,solaris,C,Pthreads,Solaris,当我在Solaris 10(SunOS 5.10)下编译并运行它时,它不会停止。但是在Linux下它可以正常工作。根据POSIX,printf(以及所有stdio)可能是一个取消点。不需要这样做。我怀疑Solaris只是没有选择让它成为一个。您是否在此处尝试了另一个类似于睡眠的功能 如果您真的需要printf可取消,您可能需要实现自己的printf类函数作为dprintf的包装器,但是如果您依赖于stdio的内置锁定功能,printf(以及所有stdio),那么这将无法很好地工作可能是取消点。不
printf
(以及所有stdio)可能是一个取消点。不需要这样做。我怀疑Solaris只是没有选择让它成为一个。您是否在此处尝试了另一个类似于睡眠的功能
如果您真的需要printf
可取消,您可能需要实现自己的printf
类函数作为dprintf
的包装器,但是如果您依赖于stdio的内置锁定功能,printf
(以及所有stdio),那么这将无法很好地工作可能是取消点。不需要这样做。我怀疑Solaris只是没有选择让它成为一个。您是否在此处尝试了另一个类似于睡眠的功能
如果您确实需要printf
可取消,您可能需要实现自己的printf
类函数作为dprintf
的包装器,但是如果依赖stdio的内置锁定功能,pthread_cancel()的值是多少
return?您是否检查了目标线程的取消状态和类型?@kerrek sb是的,我阅读了linux和solaris下的手册页。@KingsIndian nothingchanged@AlexeyMatveev您是否检查了这些函数的返回值?它们都成功了吗?pthread\u cancel()
返回了什么值?你检查过目标线程的取消状态和类型吗?@kerrek sb是的,我读过linux和solaris下的手册页。@KingsIndian什么都没有changed@AlexeyMatveev您是否检查了这些函数的返回值?他们都成功了?
#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);
}