Download presentation
Presentation is loading. Please wait.
1
1 Reader-writer Problem w/ Additional Requirement I Reader-writer problem: Share a buffer which holds one item (an integer) A single reader and writer Reader: only read when there is item in buffer Writer: only write when there is space in buffer Q1: How to make the writer enter the critical section first?
2
2 Answer 1 Bool first_access = TRUE; Semaphore sem; //init 1 Bool buff_empty = TRUE; Reader() { while(1){ if( ! first_access){ sem.wait(); if(!buff_empty) { read an integer; buff_empty = TRUE; } sem.signal(); }
3
3 Answer 1 (cont’d) Writer() { while(1) { if( first_access) { write an integer; buff_empty = FALSE; first_access = FLASE; } else { sem.wait(); if(buff_empty) { write an integer; buff_empty = FALSE; } sem.signal(); } What’s wrong?
4
4 Answer 2 Bool first_access = TRUE; Semaphore sem; //init 0 Bool buff_empty = TRUE; Reader() { while(1){ sem.wait(); if(!buff_empty) { read an integer; buff_empty = TRUE; } sem.signal(); }
5
5 Answer 2 (cont’d) Writer() { while(1) { if( first_access) { first_access = FLASE; sem.signal(); } sem.wait(); if(buff_empty) { write an integer; buff_empty = FALSE; } sem.signal(); } Is this right?
6
6 Answer 3 modified writer Writer() { while(1) { if( first_access) { first_access = FLASE; write an integer; buff_empty = FALSE; sem.signal(); } sem.wait(); if(buff_empty) { write an integer; buff_empty = FALSE; } sem.signal(); }
7
7 Answer 4 modified writer Writer() { while(1) { if(! first_access) sem.wait(); first_access = FLASE; write an integer; buff_empty = FALSE; sem.signal(); }
8
8 Reader-writer Problem w/ Additional Requirement I Reader-writer problem: Share a buffer which holds one item (an integer) A single reader and writer Reader: only read when there is item in buffer Writer: only write when there is space in buffer Q1: How to make the writer enter the critical section first?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.