我使用以下代码杀死了单线程。如何使用此代码杀死线程数组?

时间:2014-11-29 08:40:00

标签: c multithreading pthreads posix

        #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;    }

1 个答案:

答案 0 :(得分:1)

您可以使用您选择的任何方法终止一个或多个线程。您正在编写线程运行的代码,因此您可以将它们编码为在您喜欢的任何条件下终止。没有特别的限制。

顺便说一句,你的代码不会杀死一个线程。

  

SIGKILL信号被发送到进程以使其立即终止(kill)。与SIGTERM和SIGINT相反,此信号无法捕获或忽略,接收过程无法在接收到此信号时执行任何清理。 - Wikipedia

所以你告诉一个线程杀死进程,它做了。如果你觉得你需要强制一个线程做某事,那就意味着你没有编写线程来做你想做的事情。而不是试图杀死一个线程,代码线程终止自己。