Reader / Writer 동기화

CS/Common 2010. 1. 8. 05:45
원문 : Stanford iTunesU Programming Paradigm 16강

버퍼에서 Read 전에 Write 금지.
Write 되지 않은 버퍼 Read 하지 않기.
01char buffer[8];
02Semaphore emptyBuffers(8);
03Semaphore fullBuffers(0);
04 
05int main()
06{
07    ThreadNew("Writer", Writer, 0);
08    ThreadNew("Reader", Reader, 0);
09    RunAllThread();
10}
11 
12void 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 
23void 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}
: