Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <semaphore.h>
- #define P sem_wait
- #define V sem_post
- #define N 10
- sem_t empty;
- sem_t full;
- int w = 0; // write index
- int r = 0; // read index
- int buffer[N]; // buffer
- void* read_buffer(void* data)
- {
- while(1)
- {
- P(&full);
- printf("--------------- Read ---------------\n");
- printf("Read [%d] : %d\n\n", r, buffer[r]);
- buffer[r] = -1;
- r = (r + 1) % N;
- V(&empty);
- sleep(2);
- }
- pthread_exit(NULL);
- }
- void* write_buffer(void* data)
- {
- int cpt = 0;
- while(1)
- {
- P(&empty);
- printf("--------------- Write ---------------\n");
- buffer[w] = cpt;
- printf("Write [%d] : %d\n\n", w, cpt);
- w = (w + 1) % N;
- V(&full);
- cpt++;
- sleep(2);
- }
- pthread_exit(NULL);
- }
- int main()
- {
- for (int i = 0; i <N ; i++)
- {
- buffer[i] = -1 ;
- }
- pthread_t writer;
- pthread_t reader;
- // on initialise les deux sémaphore,
- sem_init(&empty, 0, N);
- sem_init(&full, 0, 0);
- // on crée les threads
- pthread_create(&writer, NULL, write_buffer, NULL);
- pthread_create(&reader, NULL, read_buffer, NULL);
- // pn attends que les threads se terminent avant de fermer le programme
- pthread_join(writer, NULL);
- pthread_join(reader, NULL);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement