我在以正确的顺序输出线程时遇到一些问题。我的程序需要至少 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。
该怎么办。
将变化的延迟放在printf
thread_main.c 中。 (并给它一个更好的名字)。然后,您必须将消息和 id 传递给线程。
看手动的有关如何操作的示例。注意tinfo
正在传递给线程。
我将从 3 个例程开始,每个线程一个例程,并具有不同的消息和 ID。当此工作正常时,开始探索如何在启动时向他们传递信息。