我对线程和fork不太熟悉,为了更好地理解它们,我编写了一些简单的程序。其中一个小程序我编写了两个程序,一个在两个进程上打印计数器,另一个在两个线程上。
我注意到fork打印出的计数器是交错的,而线程则打印一个线程的计数器,然后再打印另一个线程的计数器。因此,线程不太并行,而更像串行。这是为什么?我做错了什么吗?
此外,pthread_join究竟是什么?即使我不使用pthread_join,程序也会运行得类似。
下面是我的线程代码:
此外,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程序?即计数器的打印交织。