【问题标题】:how to execute a thread after completion of another thread?另一个线程完成后如何执行一个线程?
【发布时间】:2017-09-17 10:51:56
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
void *f1(void *p)
{
system("./while.exe");
}

main()
{
int i=0;
int k=3;
int j=0;
void *status
while(i<k)
{

    thread_id = pthread_create(&thread_handler, NULL, &f1,NULL);
 pthread_join(thread_pram_play_handler, &status);
//if(((int *)status)==0)
            i++;
}//while

while(1)
{
printf("\nEnte value ");
scanf("%d",&j);
if(j==1)
{
system("pkill while.exe");
}
} 
}

而.c 包含:

#include<stdio.h>
main()
{
int i=0;
for(i=0;i<25;i++)
{
printf("\nHI");
}
}

在这里,我只是在编写与我的实际代码相似的代码。 我的要求 1.我想在一个完成后执行三个线程。 2. 我想在使用 pkill 之间终止它。

使用 pthread_join 我可以一个接一个地执行线程,但我无法杀死。

如果我不使用 pthread_join,那么线程会同时执行并能够杀死它们。我认为它正在阻塞进程。

我无法满足我的要求。所以要么我必须改变线程执行方式,要么必须改变终止线程的方式。

谢谢

我们将不胜感激。

【问题讨论】:

  • 所示代码无法编译。这不好。
  • 还有它的代码格式错误,难以阅读。这也不好。
  • 更重要的是至少应该是int main(void)。
  • 这段代码和我的实际代码完全相似。我的实际代码包含许多相关文件,它会很大,所以只是为了很好地传达我的问题。我写了这个程序。
  • "只是为了很好地表达我的问题。我编写了这个程序。" 这是正确的方法,是的,如果代码可以编译的话。

标签: c linux process pthreads kill


【解决方案1】:

我想在另一个完成后执行三个线程。

那么你根本不需要线程。这种要求违背了多线程的目的。

如果我不使用 pthread_join,那么线程会同时执行并能够杀死它们。我认为它正在阻塞进程。

是的,由于主线程在pthread_join() 处被阻塞(等待使用pthread_create() 创建的完成),它没有机会执行您的pkill 命令。 system() 阻塞直到命令完成,这反过来阻塞了在 pthread_join() 等待的主线程。

基本上你的两个要求是相互矛盾的。您可以做的最接近的事情是使用&amp; 在后台运行“命令”:

system("./while.exe &");

这样system() 立即返回,主线程可以继续运行pkill 命令。但是这种方法可以满足您的要求,在实际编程中没有多大意义。

【讨论】:

  • 感谢您的回答。我按照您说的尝试了,但是所有线程都在同时执行。有没有其他方法可以解决这个问题。
  • 线程应该同时运行 ;-) 我不明白你为什么有这样的要求。除了 system() 会 fork & exec 命令。多线程程序中的fork() 可能很棘手:linuxprogrammingblog.com/…
【解决方案2】:

将killer-while-loop的主体放入另一个线程函数中,并在您启动f1-thread之前将其作为单独的线程启动。

等待两个线程加入并重新开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2014-10-10
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多