Dies ist mein Code für Hersteller und Verbraucher Problem. Es kann kompiliert werden, aber wenn ich das Programm starte, wird nichts gedruckt. Ich teste das Programm und fand das Problem vielleicht über sem_wait(). Warum könnte das Programm kompiliert werden, aber die Ausgabe ist falsch? Vielen Dank.sem_wait() in Hersteller und Verbraucher
int main(int argc, char *argv[]) {
pthread_mutex_init(&mutex, NULL);
empty = sem_open("/mysem", O_CREAT, 0644, BUFFER_SIZE);
full = sem_open("/mysem", O_CREAT, 0644, 0);
pthread_create(&pro_thread, NULL, producer, NULL);
pthread_create(&con_thread, NULL, consumer, NULL);
pthread_exit(NULL);
return 0;
}
Ist die Funktion sem_open() richtig? Ich habe die folgende Zeile kommentiert und das Programm könnte laufen ... vielleicht ist das Problem über sem_open?
empty = sem_open("/mysem", O_CREAT, 0644, BUFFER_SIZE);
Ich bin nicht mit Ihnen einverstanden. Zu Beginn ist counter 0 und BUFFER_SIZE ist 10, der Producer geht also nicht in die while-Schleife. – Helen
Wenn der Puffer voll ist, bedeutet counter == BUFFER_SIZE, dass der Produzent die Produktion stoppt, damit der Produzent stoppt. Anfangs gab es keinen Artikel im Puffer, so dass der Produzent etwas produzieren konnte. – Helen
Sie haben Recht, ich habe es falsch gesehen ... Im Denken, wenn die pthread_mutex_lock (& Mutex); sorgt dafür, dass der Verbraucher die Sperre einnimmt und für immer in seiner while-Schleife wartet. In diesem Fall wird der Produzent nie etwas produzieren, weil er darauf wartet, dass der Konsument den Mutex freigibt. – Jorge