Reader / Writer 동기화
CS/Common 2010. 1. 8. 05:45원문 : Stanford iTunesU Programming Paradigm 16강
버퍼에서 Read 전에 Write 금지.
Write 되지 않은 버퍼 Read 하지 않기.
버퍼에서 Read 전에 Write 금지.
Write 되지 않은 버퍼 Read 하지 않기.
01 | char buffer[8]; |
02 | Semaphore emptyBuffers(8); |
03 | Semaphore fullBuffers(0); |
04 |
05 | int main() |
06 | { |
07 | ThreadNew( "Writer" , Writer, 0); |
08 | ThreadNew( "Reader" , Reader, 0); |
09 | RunAllThread(); |
10 | } |
11 |
12 | void Writer() |
13 | { |
14 | for ( int i=0; i < 40; ++i) |
15 | { |
16 | char c = PrepareRandomChar(); |
17 | SemaphoreWait(emptyBuffers); |
18 | buffer[ i%f ] = c; |
19 | SemaphoreSignal(fullBuffers); |
20 | } |
21 | } |
22 |
23 | void Reader() |
24 | { |
25 | for ( int i=0; i < 40; ++i) |
26 | { |
27 | SemaphoreWait(fullBuffers); |
28 | char c = buffer[ i%f ]; |
29 | ProcessChar(c); |
30 | SemaphoreSignal(emptyBuffers); |
31 | } |
32 | } |