
pthread_kill:
pthread_kill和kill之间的区别是向线程发送信号. 大多数信号的默认操作是终止进程的运行,因此我们必须使用signal()捕获信号并添加处理功能.
int pthread_kill(pthread_t thread, int sig);
Sig信号发送到具有指定ID的线程. 如果程代码中未执行任何处理pthread kill 返回值,则整个过程将根据信号的默认行为受到影响,即,如果将SIGQUIT发送到线程,但该线程未实现信号处理功能,则整个过程将退出.
pthread_kill(线程ID,SIGKILL)杀死整个过程. 如果要获得正确的行为,则需要程中实现信号(SIGKILL,sig_handler). 因此,如果int sig的参数不为0,则必须清楚该怎么做,并且必须实现线程的信号处理功能,否则会影响整个过程.

如果int sig为0,则这是一个保留信号,其目的是确定线程是否仍然存在. pthread_kill的返回值: 成功: 0个线程不存在: ESRCH信号无效: EINVAL
代码:
int kill_rc = pthread_kill(thread_id,0);
if(kill_rc == ESRCH)
printf("the specified thread did not exists or already quit\n");
else if(kill_rc == EINVAL)
printf("signal is invalid\n");
else
printf("the specified thread is alive\n");
pthread_cancel
原型:

int pthread_cancel(pthread_t thread);
向线程发送取消执行的请求. 如果成功,则返回0,否则为非零值. 成功的传输并不意味着线程将终止. 成功返回零,错误返回非零错误代码ESRCH: 找不到具有指定线程ID的线程.
中止和退出的比较
退出将做一些释放工作: 释放所有静态全局对象,缓存pthread kill 返回值,关闭所有I / O通道,然后终止程序. 如果通过atexit注册了功能,则注册的功能也将以与atexit相反的顺序被调用. 但是,如果atexit函数引发异常,它将直接调用终止.
中止: 不执行任何清理工作就立即终止程序.

以下是基本的线程功能:
--------------------------------------------------- -----------------
POSIX功能说明
--------------------------------------------------- -----------------
pthread_create创建线程

pthread_self找出自己的线程ID
pthread_equal测试两个线程ID是否相等
pthread_detach设置线程以释放资源
pthread_join等待线程
pthread_cancel终止另一个线程
pthread_exit退出线程而不退出进程
pthread_kill向线程发送信号
--------------------------------------------------- ----------------
以上是编辑器为您提供的Linux多线程环境. 总结了进程线程终止功能. 希望您能支持脚本首页〜
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-174794-1.html
你是老百姓