Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ POSIX-pthread_kill()?_C++_Multithreading_Pthreads - Fatal编程技术网

C++ POSIX-pthread_kill()?

C++ POSIX-pthread_kill()?,c++,multithreading,pthreads,C++,Multithreading,Pthreads,为什么这个线程在我杀死它的情况下继续执行 pthread_t pid; pthread_create(&pid, NULL, (func)countdown, NULL); pthread_kill(pid, 1); pthread_join(pid, NULL); 是一个向线程发送信号的函数。您当前正在向其发送信号1,即SIGHUP。请求或强制终止的标准信号为SIGTERM和SIGKILL,分别为15和9 此外,您应该使用常量而不是幻数来发送信号。这些在signal.h中定义。这将给

为什么这个线程在我杀死它的情况下继续执行

pthread_t pid;
pthread_create(&pid, NULL, (func)countdown, NULL);
pthread_kill(pid, 1);
pthread_join(pid, NULL);
是一个向线程发送信号的函数。您当前正在向其发送信号
1
,即
SIGHUP
。请求或强制终止的标准信号为
SIGTERM
SIGKILL
,分别为
15
9

此外,您应该使用常量而不是幻数来发送信号。这些在
signal.h
中定义。这将给你更多的细节


更新:根据nos的注释,终止线程(而不是整个应用程序)的正确方法是使用。假设接收线程没有注册信号处理程序,使用上面描述的
pthread\u kill
I会终止整个进程。

终止线程的方法是使用pthread\u cancel,而不是pthread\u kill(但即使这样也需要非常小心)。使用pthread_kill,如果操作要终止,则整个进程都会终止,而不仅仅是线程。是的,
pthread_cancel
是取消POSIX线程的
正确的方法,但我敢打赌,
正确的
取消线程的方法是使用某种条件对象(一个
pthread\u cond
类型,或者只是一个简单的
bool
int
)在线程中被检查…取消线程(在POIX或Windows中)可能会对应用程序产生负面影响,并可能导致堆栈损坏问题(尽管大多数时候你可能很幸运,没有“看到”这些错误)。