• 1000 1003 *
в приведенном ниже коде я не могу увеличить счетчик
PS: Я прочитал несколько сообщений о безымянных семафорах и видел несколько сообщений о переполнении стека. либо они не решают мою проблему, либо они являются примерами потоков и семафоров, а не дочерних процессов и семафоров
Также я настаиваю на использовании безымянного семафора, так как я новичок в этом, я могу делать глупостей sh ошибка.
#include<stdio.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<semaphore.h>
#include<unistd.h>
#include<stdlib.h>
sem_t mutex;
int counter = 1;
void child(int id){
// critical region
sem_wait(&mutex);
printf("Counter right now for %d is %d\n" , id, counter);
printf("Increasing counter for %d\n", id);
(counter)++;
printf("Counter now for %d is %d\n", id, counter);
sem_post(&mutex);
}
int main(){
pid_t pid;
sem_init(&mutex, 1, 1);
for(int kid = 1; kid < 5; kid++){
pid = fork();
if(pid==0){
child(kid);
printf("Counter after child %d is %d\n\n", kid, counter);
exit(0);
}
else{
printf("parent process %d with counter = %d\n\n", kid, counter);
}
}
int status;
for(int kid=1; kid<5; kid++){
wait(&status);
}
printf("final counter is %d\n", counter);
sem_destroy(&mutex);
}
результат, который я получаю, равен 1, результат, который я ожидаю, равен 5