Я относительно новичок в резьбах и вилках. Поэтому, чтобы понять их немного лучше, я писал простые программы. Одна из маленьких программ я написал две программы: одну для печати счетчика на двух процессах, а другую с двумя потоками. Что я заметил, так это то, что вилка печатает счетчики с чересстрочной разверткой, в то время как нить отпечатывает счетчик одного потока, а затем остальные. Итак, поток не так параллелен, но ведет себя более серийно. Почему? Я делаю что-то неправильно?Резьба и вилки
Кроме того, что именно делает 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;
}
И вот мой код вилка
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;
}
EDIT: Как я могу сделать резьбовую программа ведет себя больше как программы вилки? то есть счетчик печатает переплетение.