该怎么办。

该怎么办。

我在以正确的顺序输出线程时遇到一些问题。我的程序需要至少 2 个参数(可以更多,但总是一次 2 个,因为一个是整数(线程等待多少秒),另一个是 char*(只是一条常规消息))。程序的输出是线程号(索引)和第二个参数的消息,但线程需要根据第一个参数的时间进行排序。主线程需要等待所有其他线程。最多有 10 个线程。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>


void* thread_main(void* arg){
    sleep(1);
    return NULL;
}

int main(int argc, char** argv){
    pthread_t tid[10];
    int s;

    int index=0;
    for(int i=1;i<argc;i+=2){
      int param1= atoi(argv[i]);
      char* param2= argv[i+1];

      s=pthread_create(&tid[index],NULL,thread_main,NULL);
      usleep(param1*1000);
      printf("Thread %d : %s\n",index+1,param2);
      index++;
    }
    
    for(int i=0;i<index+1;i++){
      s=pthread_join(tid[i],NULL);
    }    
    
    return 0;
}

这是我的代码。当我输入代码的参数时:

300 this_is_last 100 this_is_first 200 this_is_middle

输出应该是这样的:

Thread 2 : this_is_first
Thread 3 : this_is_middle
Thread 1 : this_is_last

但通过我的代码我得到了这个:

Thread 1 : this_is_last
Thread 2 : this_is_first
Thread 3 : this_is_middle

我是线程新手,我真的不知道如何解决这个问题。

答案1

从看代码来看。线程内没有输出。因此线程什么也不做。你可以删除create_thread,它就可以了确切地一样的东西。

输出将按顺序排列。不同的时间(根据偶数参数)。

此外,每个线程都称为 thread_main。

该怎么办。

将变化的延迟放在printfthread_main.c 中。 (并给它一个更好的名字)。然后,您必须将消息和 id 传递给线程。

手动的有关如何操作的示例。注意tinfo正在传递给线程。

我将从 3 个例程开始,每个线程一个例程,并具有不同的消息和 ID。当此工作正常时,开始探索如何在启动时向他们传递信息。

相关内容