Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <semaphore.h>
- #include <pthread.h>
- #define NUMBER_OF_AWESOMENESS 100
- #define SIZE 1000
- void *consume(void*);
- void *produce(void*);
- typedef struct {
- sem_t full;
- sem_t empty;
- sem_t mutex;
- int buffer;
- } arguments;
- int main(int argc, char ** argv)
- {
- arguments *args;
- args = malloc (sizeof args);
- args->buffer = 0;
- sem_init(&args->full, 0, 0);
- sem_init(&args->empty, 0, SIZE);
- sem_init(&args->mutex,0, 1);
- pthread_t consumers[NUMBER_OF_AWESOMENESS];
- pthread_t producers[NUMBER_OF_AWESOMENESS];
- for (int i = 0; i <= NUMBER_OF_AWESOMENESS; ++i) {
- pthread_create(&consumers[i], NULL, consume, (void*) args);
- pthread_create(&producers[i], NULL, produce, (void*) args);
- }
- for (int i = 0; i <= NUMBER_OF_AWESOMENESS; ++i) {
- pthread_join(consumers[i], NULL);
- pthread_join(producers[i], NULL);
- }
- exit(EXIT_SUCCESS);
- }
- void* consume(void *arg)
- {
- arguments* args = (arguments *) arg;
- while (1) {
- sem_wait(&args->full);
- sem_wait(&args->mutex);
- args->buffer--;
- printf("\nConsume: \t %d", args->buffer);
- sem_post(&args->mutex);
- sem_post(&args->empty);
- }
- return NULL;
- }
- void* produce(void *arg)
- {
- arguments* args = (arguments *) arg;
- while (1) {
- sem_wait(&args->empty);
- sem_wait(&args->mutex);
- args->buffer++;
- printf("\nProduce: \t %d", args->buffer);
- sem_post(&args->mutex);
- sem_post(&args->full);
- }
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement