Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. int my_read_lock_lock(czytelnia_t* czytelnia_p){
  2.     pthread_mutex_lock(&czytelnia_p->mutex);
  3.     if((czytelnia_p->liczba_pisz > 0) || (&czytelnia_p->pisarze != 0))
  4.         pthread_cond_wait(&czytelnia_p->czytelnicy, &czytelnia_p->mutex);
  5.     czytelnia_p->liczba_czyt++;
  6.     pthread_cond_signal(&czytelnia_p->czytelnicy);
  7.     pthread_mutex_unlock(&czytelnia_p->mutex);
  8. }
  9. int my_read_lock_unlock(czytelnia_t* czytelnia_p){
  10.    pthread_mutex_lock(&czytelnia_p->mutex);
  11.    czytelnia_p->liczba_czyt--;
  12.    if(czytelnia_p->liczba_czyt==0)
  13.     pthread_cond_signal(&czytelnia_p->pisarze);
  14.    pthread_mutex_unlock(&czytelnia_p->mutex);
  15. }
  16. int my_write_lock_lock(czytelnia_t* czytelnia_p){
  17.   pthread_mutex_lock(&czytelnia_p->mutex);
  18.   if((czytelnia_p->liczba_czyt+czytelnia_p->liczba_pisz)>0)
  19.     pthread_cond_wait(&czytelnia_p->pisarze, &czytelnia_p->mutex);
  20.   czytelnia_p->liczba_pisz++;
  21.   pthread_mutex_unlock(&czytelnia_p->mutex);
  22. }
  23. int my_write_lock_unlock(czytelnia_t* czytelnia_p){
  24.     pthread_mutex_lock(&czytelnia_p->mutex);
  25.     czytelnia_p->liczba_pisz--;
  26.     if(&czytelnia_p->czytelnicy !=0)
  27.         pthread_cond_signal(&czytelnia_p->czytelnicy);
  28.     pthread_mutex_unlock(&czytelnia_p->mutex);
  29. }
  30. void inicjuj(czytelnia_t* czytelnia_p){
  31.     czytelnia_p->liczba_czyt=0;
  32.     czytelnia_p->liczba_pisz=0;
  33.     pthread_cond_init(&czytelnia_p->pisarze,NULL);
  34.     pthread_cond_init(&czytelnia_p->czytelnicy, NULL);
  35.     pthread_mutex_init(&czytelnia_p->mutex, NULL);
  36. }
  37. void czytam(czytelnia_t* czytelnia_p){
  38.     printf("CZYTAM!=> liczba_pisz: %d, liczba_czyt: %d\n", czytelnia_p->liczba_pisz, czytelnia_p->liczba_czyt);
  39.     usleep(rand()%1000000);
  40. }
  41. void pisze(czytelnia_t* czytelnia_p){
  42.     printf("PISZE!=> liczba_pisz: %d, liczba_czyt: %d\n", czytelnia_p->liczba_pisz, czytelnia_p->liczba_czyt);
  43.     usleep(rand()%1000000);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement