Ich versuche, eine Hersteller/Verbraucher-Anwendung zu machen. Das Problem ist, mein Produzent füllt den ganzen Puffer, DANN entfernt der Verbraucher den ganzen Puffer ... sollte der Verbraucher nicht einen Gegenstand aus dem Puffer entfernen, sobald der Produzent einen post
zum Semaphor macht?Arbeiten mit Hersteller und Verbraucher, Sempahore in C
meinen Code:
void* producerFunc(void* arg)
{
while(n_insertions < N_PRODUCTS)
{
sem_wait(&sem_postAvaliable);
sem_wait(&mutex);
//Insert Item
sem_post(&mutex);
sem_post(&sem_posTaken);
}
pthread_exit(NULL);
}
void* consumerFunc(void* arg)
{
while(n_consumed < N_PRODUCTS)
{
sem_wait(&sem_posTaken);
sem_wait(&mutex);
//Remove from bufer
sem_post(&mutex);
sem_post(&sem_postAvaliable);
}
pthread_exit(NULL);
}
n_insertions
ist eine globale ganze Zahl, die die Anzahl der Elemente in den Puffer eingefügt zählt;
n_consumed
ist eine globale Ganzzahl, die zählt, wie oft der Verbraucher ein Element aus dem Puffer verbraucht hat.
Das ist seltsam, bei welchem Wert initialisierst du die Semaphoren 'sem_postAvaliable' und' sem_posTaken'? Außerdem können Sie 'pthread_mutex_t' verwenden, um einen Mutex zu deklarieren und dann' pthread_mutex_lock' und 'pthread_mutex_unlock' zu verwenden, um diesen Mutex zu entsperren und zu sperren. – OiciTrap
@cursillosonline sem_postAvaliable ist auf 5 gesetzt, die Größe meines Puffers. sem_posTaken wird mit 0 initialisiert, weil noch kein Speicherplatz des Puffers belegt ist. Ich werde mit pthread_mutex_lock überprüfen (Irgendwelche signifikanten Unterschied?) – PlayHardGoPro