Я пытаюсь изучить многопроцессорность и как она работает по сравнению с многопоточностью. Мне трудно найти хороший источник его использования, и мне было интересно, кто-нибудь может дать мне несколько примеров по сравнению с многопоточностью.
Для практики я решил написать код с потоками, а затем с процессами. Я застрял в том, чтобы выяснить, как создать нужные процессы, закрыть процессы и использовать мьютекс для блокировки / разблокировки процесса.
Например, если я хочу создать 5 потоков в функции, я могу сделать это:
for(i = 0; i < 5; i++) {
pthread_create(&(myThread[i]), NULL, myFunction, argument);
}
Как бы я это сделал в процессе? Я подумал о вызове функции, а затем о вызове fork в функции, но я не уверен, как получить конкретный номер. Например, если я сделал это:
myFunction(argument) {
fork();
fork();
fork();
...
}
Это дало бы мне 8 всего процесса. Очень много. Но если бы я удалил fork (), у меня было бы всего 4 процесса, что слишком мало. Как бы я создал столько процессов, сколько я хочу?
Далее, если бы я закрыл темы, я бы просто сделал это:
for(i = 0; i < 5; i++){
pthread_join(myThread[i],NULL);
}
Но как бы я это сделал для процессов?
Наконец, чтобы обеспечить безопасность потоков, я могу использовать мьютекс и разблокировать вызов при необходимости.
static pthread_mutex_t my_mutex;
pthread_mutex_lock(&my_mutex);
...
pthread_mutex_unlock(&my_mutex);
Могу ли я использовать мьютексы с процессом? Если нет, какая альтернатива есть? Если да, то как будет отличаться его реализация?