Ich arbeite mit Semaphoren und ich kämpfe mit einem Teil des Codes.
Code:C Semaphoren mit sem_wait()
// semaphore initialized to zero
for(int i = 0; i < N; i++)
{
fork();
// statements
sem_wait(semaphore);
printf("Process %d is done\n", i);
exit(0);
}
for(int i = 0; i < N; i++)
{
sem_post(semaphore);
}
Problem ist, stoppt die Schleife nach der ersten Iteration wegen sem_wait
, aber ich würde es nur den aktuellen Prozess stoppen möchten, so dass alle anderen Iterationen und am Ende durchgeführt werden kann Code, ich werde alle Prozesse "freigeben". Gibt es einen Weg, dies zu erreichen?
Danke!
EDIT:
// initialization of semaphore
semaphore = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
sem_init(semaphore, 1, 0);
Zeig uns, wie hast du 'semarophe' Variable initialisiert. –
Können Sie erklären, was Sie mit dem "aktuellen Prozess" meinen? Sobald Sie erklären, was Sie damit meinen, wickeln Sie einfach den Aufruf zu 'sem_wait' in einer' if'-Anweisung, die alles testet, was Sie testen müssen. –
Nun, in For-Schleife nrufe ich 'fork()' N mal, also erstelle ich N Prozesse. Der aktuelle Prozess bedeutet jeden Prozess bei jeder Iteration. – SevO