Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int my_read_lock_lock(czytelnia_t* czytelnia_p){
- pthread_mutex_lock(&czytelnia_p->mutex);
- if((czytelnia_p->liczba_pisz > 0) || (&czytelnia_p->pisarze != 0))
- pthread_cond_wait(&czytelnia_p->czytelnicy, &czytelnia_p->mutex);
- czytelnia_p->liczba_czyt++;
- pthread_cond_signal(&czytelnia_p->czytelnicy);
- pthread_mutex_unlock(&czytelnia_p->mutex);
- }
- int my_read_lock_unlock(czytelnia_t* czytelnia_p){
- pthread_mutex_lock(&czytelnia_p->mutex);
- czytelnia_p->liczba_czyt--;
- if(czytelnia_p->liczba_czyt==0)
- pthread_cond_signal(&czytelnia_p->pisarze);
- pthread_mutex_unlock(&czytelnia_p->mutex);
- }
- int my_write_lock_lock(czytelnia_t* czytelnia_p){
- pthread_mutex_lock(&czytelnia_p->mutex);
- if((czytelnia_p->liczba_czyt+czytelnia_p->liczba_pisz)>0)
- pthread_cond_wait(&czytelnia_p->pisarze, &czytelnia_p->mutex);
- czytelnia_p->liczba_pisz++;
- pthread_mutex_unlock(&czytelnia_p->mutex);
- }
- int my_write_lock_unlock(czytelnia_t* czytelnia_p){
- pthread_mutex_lock(&czytelnia_p->mutex);
- czytelnia_p->liczba_pisz--;
- if(&czytelnia_p->czytelnicy !=0)
- pthread_cond_signal(&czytelnia_p->czytelnicy);
- pthread_mutex_unlock(&czytelnia_p->mutex);
- }
- void inicjuj(czytelnia_t* czytelnia_p){
- czytelnia_p->liczba_czyt=0;
- czytelnia_p->liczba_pisz=0;
- pthread_cond_init(&czytelnia_p->pisarze,NULL);
- pthread_cond_init(&czytelnia_p->czytelnicy, NULL);
- pthread_mutex_init(&czytelnia_p->mutex, NULL);
- }
- void czytam(czytelnia_t* czytelnia_p){
- printf("CZYTAM!=> liczba_pisz: %d, liczba_czyt: %d\n", czytelnia_p->liczba_pisz, czytelnia_p->liczba_czyt);
- usleep(rand()%1000000);
- }
- void pisze(czytelnia_t* czytelnia_p){
- printf("PISZE!=> liczba_pisz: %d, liczba_czyt: %d\n", czytelnia_p->liczba_pisz, czytelnia_p->liczba_czyt);
- usleep(rand()%1000000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement