螺纹和叉子

Ann*_*Ann 5 c fork pthreads

我对线程和叉子比较陌生。所以为了更好地理解它们,我一直在编写简单的程序。我写了两个程序的小程序之一,一个在两个进程上打印一个计数器,另一个有两个线程。我注意到的是,叉子以交错方式打印计数器,而线程则打印一个线程的计数器,然后是其他线程的计数器。所以线程不是那么并行,而是表现得更串行,这是为什么?难道我做错了什么?

另外, 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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的 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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:如何使线程程序的行为更像 fork 程序?即柜台打印交织。