Семантика fork () и pthread_create () немного отличается.
fork () создаст новый процесс, в котором глобальные переменные будут разделены между родителем и потомком. В большинстве реализаций ОС используется семантика копирования при записи, что означает, что и родительский, и дочерний процессы будут использовать одни и те же страницы физической памяти для всех глобальных переменных, пока один из процессов не попытается отредактировать физическую память, после чего копия этого страница создана таким образом, что теперь каждый процесс получает свою собственную копию и не видит другие процессы, поэтому процессы изолированы.
pthread_create (), с другой стороны, создает новый поток в том же процессе. Новый поток будет иметь отдельное пространство стека от других работающих потоков того же процесса, однако глобальные переменные и пространство кучи распределяются между всеми потоками одного и того же процесса. Вот почему вам часто нужен мьютекс для координации доступа к общей части памяти между несколькими потоками одного и того же процесса.
TL; DR версия: с fork () вы не видите изменений другого парня; с pthread_create () вы делаете.