我对线程和叉子比较陌生。所以为了更好地理解它们,我一直在编写简单的程序。我编写了两个程序的小程序之一,一个用于在两个进程上打印计数器,另一个用于两个线程。我注意到的是,fork 交错打印计数器,而线程打印一个线程的计数器,然后打印其他线程的计数器。所以线程不是那么并行,而是表现得更串行为什么呢?难道我做错了什么?
另外,pthread_join 到底是做什么的?即使我不执行 pthread_join,程序也会以类似方式运行。
这是我的线程代码
void * thread1(void *a){
int i =0;
for(i=0; i<100; i++)
printf("Thread 1 %d\n",i);
}
void * thread2(void *b){
int i =0;
for(i=0; i<100; i++)
printf("Thread 2 %d\n", i);
}
int main()
{
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,thread1, NULL);
pthread_create(&tid2,NULL,thread2, NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
这是我的 fork 代码
int main(void)
{
pid_t childPID;
childPID = fork();
if(childPID >= 0) // fork was successful
{
if(childPID == 0) // child process
{ int i;
for(i=0; i<100;i++)
printf("\n Child Process Counter : %d\n",i);
}
else //Parent process
{
int i;
for(i=0; i<100;i++)
printf("\n Parent Process Counter : %d\n",i);
}
}
else // fork failed
{
printf("\n Fork failed, quitting!!!!!!\n");
return 1;
}
return 0;
}
编辑:如何使线程程序的行为更像 fork 程序?即计数器打印交织。