Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <semaphore.h>
- #include <stdlib.h>
- #include <pthread.h>
- sem_t * ready;
- sem_t * printed;
- int maxN;
- #define TRUE 1;
- #define FALSE 0;
- int keepGoing = TRUE;
- pthread_mutex_t numLock = PTHREAD_MUTEX_INITIALIZER;
- typedef struct param
- {
- int value;
- } param_t;
- void *semprint(void * arg)
- {
- while(keepGoing)
- {
- //pthread_mutex_lock(&numLock);
- sem_wait(ready); //wait for decrement
- printf("Value is: %d\n", maxN);
- //printf("notifying dec\n");
- sem_post(printed);//post for decrement
- //sem_wait(&ready); //wait for decrement
- //pthread_mutex_unlock(&numLock);
- }
- return NULL;
- }
- void *semdecrement(void * arg)
- {
- while(keepGoing)
- {
- sem_wait(printed);//wait for readytodec
- if(maxN == 1)
- {
- keepGoing = FALSE;
- }
- //printf("past wait print\n");
- maxN--;
- sem_post(ready);//post for print
- }
- return NULL;
- }
- int main(int argc, char **argv)
- {
- maxN = 10;
- sem_unlink("/ready");
- sem_unlink("/printed");
- ready = sem_open("/ready", O_CREAT, 0644, 1);
- printed = sem_open("/printed", O_CREAT, 0644, 0);
- if(ready == SEM_FAILED)
- {
- printf("ready open failed :(");
- }
- if(printed == SEM_FAILED)
- {
- printf("printed open failed :(");
- }
- //printf("READY IS: %d", ready);
- //printf("PRINTED IS: %d", printed);
- param_t data1;
- data1.value = 10;
- pthread_t printer;
- pthread_t decrementer;
- int printerT = pthread_create(&printer, NULL, semprint, &data1);
- int decrementerT = pthread_create(&decrementer, NULL, semdecrement, &data1);
- pthread_join(printer, NULL);
- pthread_join(decrementer, NULL);
- sem_close(ready);
- sem_close(printed);
- sem_unlink("/ready");
- sem_unlink("/printed");
- printf("Finished!\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement