semaphore.cc.svn-base
来自「德国Erlangen大学教学操作系统源码。」· SVN-BASE 代码 · 共 63 行
SVN-BASE
63 行
/*****************************************************************************//* Betriebssysteme *//*---------------------------------------------------------------------------*//* *//* S E M A P H O R E *//* *//*---------------------------------------------------------------------------*//* Semaphore werden zur Synchronisation von Threads verwendet. *//*****************************************************************************/#include "meeting/semaphore.h"#include "thread/customer.h"#include "syscall/guarded_organizer.h"extern Guarded_Organizer scheduler;Semaphore::Semaphore(){ _z= 1;}Semaphore::Semaphore(int c){ _z = c;}Semaphore::~Semaphore(){}void Semaphore::p(){ Customer *cust = static_cast<Customer*>(scheduler.Scheduler::active()); if(_z==0) { enqueue(cust); scheduler.Organizer::block(*cust, *this); } else _z--;}void Semaphore::v(){ _z++; if (_z == 1) { Customer *cust = static_cast<Customer*>(dequeue()); if (cust!=NULL) { _z--; scheduler.Organizer::wakeup(*cust); } }}void Semaphore::wait(){ p(); }void Semaphore::signal(){ v(); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?