线程我有这样的疑问:杀从另一个线程
- 我怎么能杀死一个线程(可能与
pthread_cancel()
)从另一个线程?
以下是示例代码。 我需要,当我按1,其他线程被杀害。 (我必须强制杀死一个线程,而又不会让pthread_exit()
的除外)。
pthread_t THR_INPUT, THR_QUEUE;
void *thr_in(void *null) {
int opt;
while(1){
printf("1. Kill the other thread\n");
scanf("%d", &opt);
switch (opt)
{
case 1:
pthread_cancel(THR_QUEUE);
pthread_exit(NULL);
default:
printf("ATTENZIONE: Scelta %i non corretta. Riprovare.\n",opt);
}
}
}
void *thr_qu(int reparto) {
while(1){
sleep(2);
printf("I'm alive!");
}
}
int main(int argc, const char * argv[]){
void *result;
printf("-------start-------\nMenu:\n");
pthread_mutex_init(&mutex, NULL);
pthread_create(&THR_INPUT, NULL, thr_in, NULL);
pthread_create(&THR_QUEUE, NULL, thr_qu(reparto), NULL);
pthread_join(THR_INPUT, &result);
pthread_join(THR_QUEUE, &result);
printf("---end---\n");
exit(EXIT_SUCCESS);
}
我想到一个解决方案,但我不知道它是多么干净;只是这样做:
int main(int argc, const char * argv[]){
void *result;
sem = semget(SEM_KEY, 0, 0);
pthread_mutex_init(&mutex, NULL);
int pid=getpid();
pid=fork();
if(!pid){
printf("-------START-------\nMenu:\n");
pthread_create(&THR_INPUT, NULL, thr_in, NULL);
pthread_create(&THR_QUEUE, NULL, thr_qu(reparto), NULL);
pthread_join(THR_INPUT, &result);
pthread_join(THR_QUEUE, &result);
}
else{
wait(sem,0);
pthread_cancel(THR_QUEUE);
printf("---END---\n");
}
exit(EXIT_SUCCESS);
}
,并把信号在第一线,当它被要求退出,信号在主线程的信号做pthread_cancel()
。但它仍然不工作,我不知道为什么
这是拨错:'在pthread_create(THR_QUEUE,NULL,thr_qu(reparto),NULL);',应该是'在pthread_create(THR_QUEUE,NULL,thr_qu,reparto)' 什么 – 2013-04-24 19:37:57
嗯,在你的方式,我不能编译..我认为我犯了一个错误设置void * thr_qu(int reparto),所以我重写void * thr_qu(void * null),并调用pthread_create(&THR_QUEUE,NULL,thr_qu,NULL)。无论如何,我在线程参数中真的很新,所以我必须学习很多东西,比如如何将一些值传递给主线程中的线程。 – ReTanica 2013-04-24 23:50:07
声明你的线程函数是这样的:'void * thr_qu(void * arg)'。像这样创建它们:'pthread_create(&THR_QUEUE,NULL,thr_qu,&reparto)'。并且在thr_qu函数里面做这个'int reparto = * arg;'但是你必须注意这样做,因为“&reparto”不能指向局部变量,除非它是静态的。 – 2013-04-25 12:41:18