J'ai créé un code pour un projet unix en utilisant le code semaphores.My est la suivante:exécution indépendante des processus avec sémaphores
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include "display.h"
#include <semaphore.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct {
sem_t p1;
sem_t p2;
}SemPair ;
int main (int argc, char *argv[]) {
SemPair *sem = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED |MAP_ANONYMOUS , -1, 0);
int i=0;
sem_init(&(sem->p1),1,0);
sem_init(&(sem->p2),1,0);
pid_t pid = fork();
if (!pid)
{
for(i=0;i<10;i++) {
sem_wait(&(sem->p2));
display("Hello world\n");
sem_post(&(sem->p1)); }
}
else
{
for(i=0;i<10;i++) {
sem_post(&(sem->p2));
sem_wait(&(sem->p1));
display("Goodnight world\n");
sleep(1);}
}
sem_destroy(&(sem->p1));
sem_destroy(&(sem->p2));
return 0;
}
Comme vous pouvez voir mon problème est que je ne veux pas obtenir l'affichage dans l'ordre un par un, mais plutôt au hasard. Donc, ma sortie est celle-ci.
Hello world
Goodnight world
Hello world
Goodnight world
Hello world
Goodnight world
....
Au lieu de cela je veux que les processus soient pas exécutés en ordre pour la sortie sera quelque chose comme ceci:
Hello world
Hello world
Hello world
Goodnight world
Hello world
Goodnight world
Goodnight world
....
Vous devriez regarder [formatage C correct] (// prohackr112.tk/r/proper-c-formatting). Ou apprenez comment [obscurcir complètement votre code] (// prohackr112.tk/r/proper-c-obfuscation). –
Jetez un coup d'œil à ce que le sémaphore attend quand et pour quoi. –