Je fais simple producteur/problème de consommation. J'ai un producteur (chef) qui produit des portions quand le consommateur (sauvage) les consomme toutes, alors un sauvage doit attendre que le chef remplisse le pot. Je ne comprends pas quelle est mon erreur car les sauvages consomment des portions, mais le chef ne remplit pas le pot.course multitraitement partage une variable
Voici le programme:
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/wait.h>
#include <fcntl.h>
int shmid, semid;
int *portions;
sem_t *mutex, *empty, *full;
char sem_1[]= "mutex";
char sem_2[]= "full";
char sem_3[]= "empty";
void clear()
{
if (shmctl(shmid,IPC_RMID,0) == -1) perror("shmctl");
}
void producer(int num, int m)
{
int i;
while(1) {
}
}
void consumer(int num, int rounds)
{
int i;
}
int main(int argc, char *argv[])
{
int i;
int N, M, NROUNDS, pid;
if (argc != 4)
{
fprintf(stderr,"insert N savages, M portions e NROUNDS\n");
exit(1);
}
N=atoi(argv[1]);
M=atoi(argv[2]);
NROUNDS=atoi(argv[3]);
/* generate producer and consumers */
}
for(i=0;i<N;i++) {
pid=wait(NULL);
printf("Terminate process %d\n", pid);
}
clear();
}
Ceci est la sortie:
./a.out 3 5 3
Savage[2] eats
Number of portions in pot: 4
Savage[1] eats
Number of portions in pot: 3
Savage[0] eats
Number of portions in pot: 2
Savage[2] eats
Number of portions in pot: 1
Savage[1] eats
Number of portions in pot: 0
Savage[0] eats
Number of portions in pot: -1
Savage[2] eats
Number of portions in pot: -2
Terminate process 10287
Savage[1] eats
Number of portions in pot: -3
Savage[0] eats
Number of portions in pot: -4
Terminate process 10285
Terminate process 10286
Etes-vous sûr sémaphores sont le mécanisme de synchronisation correcte à utiliser? Considérez les variables de condition ... –