#include<stdio.h> #include<signal.h> #include<pthread.h> void *print1(void *tid) { pthread_t *td= tid;//assigning argument to pointer td pthread_mutex_t lock1=PTHREAD_MUTEX_INITIALIZER;//mutex for synchronization printf("Running Thread 1\n"); pthread_mutex_lock(&lock1); printf("1"); printf("2"); printf("3"); printf("4\n"); printf("Coming out of thread1\n"); sleep(2); pthread_mutex_unlock(&lock1); pthread_kill(*td,SIGKILL);//or we can use pthread_cancel(*td) killing thread 2 pthread_exit(NULL); } void *print2(void *arg) { pthread_mutex_t *lock = arg;//acquiring lock pthread_mutex_lock(lock); sleep(5); //sleeps for 5 sec printf("5"); sleep(5);//sleeps for 5 sec printf("6"); sleep(5);//sleeps for 5 sec printf("7"); sleep(5);//sleeps for 5 sec printf("8\n"); pthread_mutex_unlock(lock); pthread_exit(NULL); } int main() { int s; pthread_t tid1, tid2;//thread id's pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; printf("creating Thread 1and 2 \n"); sleep(2); pthread_create(&tid1, NULL, print1,&tid2);//creating thread1 pthread_create(&tid2, NULL, print2,&lock);//creating thread2 sleep(2); pthread_join(tid1, NULL);//joing to execute thread1 pthread_join(tid2, NULL); return 0; }
答案 0 :(得分:1)
您可以使用您选择的任何方法终止一个或多个线程。您正在编写线程运行的代码,因此您可以将它们编码为在您喜欢的任何条件下终止。没有特别的限制。
顺便说一句,你的代码不会杀死一个线程。
SIGKILL信号被发送到进程以使其立即终止(kill)。与SIGTERM和SIGINT相反,此信号无法捕获或忽略,接收过程无法在接收到此信号时执行任何清理。 - Wikipedia
所以你告诉一个线程杀死进程,它做了。如果你觉得你需要强制一个线程做某事,那就意味着你没有编写线程来做你想做的事情。而不是试图杀死一个线程,代码线程终止自己。