Skip to content
Snippets Groups Projects
Commit d6abdb71 authored by erib03's avatar erib03
Browse files

Upload New File

parent be9583da
Branches
Tags
No related merge requests found
// Aufgabe 1 (erfüllt aber auch Aufgabe 2)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define puffer 3
#define produzenten 1
#define konsumenten 1
int puffer_array[puffer];
int einfüge_index = 0, entnahme_index = 0, anzahl = 0;
pthread_mutex_t sperre;
pthread_cond_t voll;
pthread_cond_t leer;
void* produzent(void* arg) {
for (int i = 0; i < 5; i++) {
int artikel = rand() % 100;
pthread_mutex_lock(&sperre);
while (anzahl == puffer) {
pthread_cond_wait(&voll, &sperre);
}
puffer_array[einfüge_index] = artikel;
printf("produzent legt %d ab\n", artikel);
einfüge_index = (einfüge_index + 1) % puffer;
anzahl++;
pthread_cond_signal(&leer);
pthread_mutex_unlock(&sperre);
sleep(1);
}
return NULL;
}
void* konsument(void* arg) {
for (int i = 0; i < 5; i++) {
pthread_mutex_lock(&sperre);
while (anzahl == 0) {
pthread_cond_wait(&leer, &sperre);
}
int artikel = puffer_array[entnahme_index];
printf("konsument nimmt %d\n", artikel);
entnahme_index = (entnahme_index + 1) % puffer;
anzahl--;
pthread_cond_signal(&voll);
pthread_mutex_unlock(&sperre);
sleep(2);
}
return NULL;
}
int main() {
pthread_t produzent_thread, konsument_thread;
pthread_mutex_init(&sperre, NULL);
pthread_cond_init(&voll, NULL);
pthread_cond_init(&leer, NULL);
pthread_create(&produzent_thread, NULL, produzent, NULL);
pthread_create(&konsument_thread, NULL, konsument, NULL);
pthread_join(produzent_thread, NULL);
pthread_join(konsument_thread, NULL);
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment