Class BoundedBuffer{
mutex = new Semaphore(1);
hasBuffer= new Semaphore(n);// 有n个空buffer 用来装数据
hasData= new Semaphore(0);//记录有数据的buffer个数
}
// 生产者数据c 存到buffer
BoudedBuffer::Deposit(c){
hasBuffer->P(); //-- 要不要等?有空buffer 才能生产数据,没有就等待, 使用一个buff 就减少-1,
//保证互斥
mutex->P();
add c to the buffer
mutex-V();
hasData->V(); //++ 数据生产好了要加上,其实是唤醒,另一侧的消费着可能正在阻塞没有可消费的状态
}
//消费者 数据从buffer 中取出
BoudedBuffer::Remove(c){
hasData->P(); //-- 要不要等? 有没有生产好,没有就等待。
mutex->P();
remove c from the buffer;
mutex-V();
hasBuffer->V(); // ++ buffer 空下来要加上
}