我不需要正确终止线程,或使其响应"终止"命令.我有兴趣使用纯C++ 11强制终止线程.
以下代码在第一次调用 pthread_cancel 时以分段错误结束,但仅限在 Linux 下。Mac OS 下运行良好。我是否不允许在已完成运行的线程上调用 pthread_cancel ?也许我根本不应该调用 pthread_cancel ?
#include <iostream>
#include <pthread.h>
using namespace std;
void* run(void *args) {
cerr << "Hallo, Running" << endl;
}
int main() {
int n = 100;
pthread_t* pool = new pthread_t[n];
for(int i=0;i<n;i++) {
pthread_t tmp;
pthread_create(&tmp,NULL,&run,NULL);
pool[i] = (tmp);
}
for(int i=0;i<n;i++) {
pthread_join(pool[i],0);
}
for(int i=0;i<n;i++) {
pthread_cancel(pool[i]);
}
}
Run Code Online (Sandbox Code Playgroud) 我的问题与此类似。但是在查看了所有答案之后,我仍然不知道pthread_cancel()可以提供什么样的安全保证。所以我想问一个更具体的问题:
假设在名为my_thread的pthread_t变量上调用了pthread_cancel(),那么有可能在执行pthread_cancel(my_thread)时,已经以某种方式终止了与my_thread对应的实际线程,并且内核将my_thread的值回收用于另一个新创建的线程,例如通过执行pthread_cancel(my_thread),另一个意外线程被杀死了?