在编程范式中的斯坦福大学的老师说了一个例子:好比世界上就只有一台互联网的服务器,当我们浏览网页的时候,就好比服务器进行了写操作,而浏览器则进行了读操作。
我如果用简单的伪代码c++写出来是这个样子的:
int main(){ ITP(false); ThreadNew("write",write,0); ThreadNew("Reader",reader,0); RunAllThread(); void writer(){ for(int i=0;i<40; i++){ char = PrepareRandom(); buffer[i/8] = c; } void reader(){ for(int i=0; i<40; i++){ char c = buffer[i%8]; Processchar(c); } } } }
用信号量的解决办法代码如下:
int main(){ char buffer[8]; Semaphore emptyBuffer = (9); Semaphore fullBuffer = (0); ITP(false); ThreadNew("write",write,0); ThreadNew("Reader",reader,0); RunAllThread(); void writer(){ for(int i=0;i<40; i++){ char c= PrepareRandom(); semaphoreWait(emptyBuffer); //Wait on the specified semaphore buffer[i/8] = c; semaphoreSignal(fullbuffer); } void reader(){ for(int i=0; i<40; i++){ semaphoreWait(fullbuffer); char c = buffer[i%8]; Processchar(c); semaphoreSignal(emptyBuffer);//Increments the semaphore count } } } }