Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我使用以下代码杀死了单线程。如何使用此代码杀死线程数组?_C_Multithreading_Pthreads_Posix - Fatal编程技术网

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

C 我使用以下代码杀死了单线程。如何使用此代码杀死线程数组?,c,multithreading,pthreads,posix,C,Multithreading,Pthreads,Posix,您可以使用选择的任何方法杀死一个或多个线程。您正在编写线程运行的代码,因此您可以将它们编码为在您喜欢的任何条件下终止。没有特别的限制 顺便说一下,你的代码不会杀死一个线程 SIGKILL信号被发送到进程,使其立即终止。与SIGTERM和SIGINT相反,该信号不能被捕获或忽略,接收过程在接收到该信号时不能执行任何清理。- 所以你让一个线程终止进程,它就这么做了。如果您觉得需要强制某个线程执行某些操作,这意味着您没有将该线程编码为一开始希望它执行的操作。不要试图杀死一个线程,而是对该线程进行编码,

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

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

SIGKILL信号被发送到进程,使其立即终止。与SIGTERM和SIGINT相反,该信号不能被捕获或忽略,接收过程在接收到该信号时不能执行任何清理。-


所以你让一个线程终止进程,它就这么做了。如果您觉得需要强制某个线程执行某些操作,这意味着您没有将该线程编码为一开始希望它执行的操作。不要试图杀死一个线程,而是对该线程进行编码,使其自行终止。

请正确设置代码格式。有人给我答复吗?你已经就同一主题提出了4个问题。如果你仍然没有得到任何回应,这意味着你没有马上问这个问题。告诉我们你的代码在做什么,到目前为止你理解了什么,你被困在哪里等等。仅仅发布一堆代码并请求ppl帮助是没有帮助的。我已经用注释解释了我在c中创建了两个pthread,然后在thread function中1 i在执行thread1后我想杀死thread2。我的问题是,我该如何修改它,从任何其他正在执行的线程中删除线程数组?你可以发布一些代码吗。这符合我的问题,我想问的是,当我们从任何单个线程中出来时,如何杀死剩余线程的数组@DavidSchwartz@user1208381您可以使用任何您喜欢的线程同步方法。例如,可以使用受互斥锁保护的布尔值。可以使用谓词变量、互斥量和条件变量。你想怎么做就怎么做。您正在编写这些线程执行的代码,因此您可以将其编码为在您喜欢的任何条件下终止。您可以用代码解释吗?我试图杀死线程数组,但我不会!看到我的答案了,但老实说,我没有看到任何证据表明你理解其中涉及的任何问题。似乎不太可能为您的问题提供一个您能够理解的答案,而不必学习更多关于多线程的基础知识。@user1208381这不是4chan实际上,即使4chan有礼仪。在这里,我们通常不使用“u”表示“你”,也不使用“plz”表示“请”。你的写作看起来一点也不在乎。你先开始写正确的英语怎么样?如果你的问题看起来像是你给了他们一些努力,人们会更愿意帮助你。
        #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;    }