semaphoreimpl.h
来自「一个语言识别引擎」· C头文件 代码 · 共 55 行
H
55 行
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
/*
* Copyright (C) 2006 Paul Fitzpatrick
* CopyPolicy: Released under the terms of the GNU GPL v2.0.
*
*/
#ifndef _YARP2_SEMAPHOREIMPL_
#define _YARP2_SEMAPHOREIMPL_
#include <ace/Synch.h>
#include <yarp/Logger.h>
namespace yarp {
class SemaphoreImpl;
}
/**
* A semaphore abstraction for mutual exclusion and resource management.
*/
class yarp::SemaphoreImpl {
public:
SemaphoreImpl(int initialCount = 1) : sema(initialCount) {
}
virtual ~SemaphoreImpl() {}
// blocking wait
void wait() {
int result = sema.acquire();
while (result == -1) {
YARP_DEBUG(Logger::get(), "semaphore wait failed - could be gdb attaching");
result = sema.acquire();
}
}
// polling wait
bool check() {
return (sema.tryacquire()<0)?0:1;
}
// increment
void post() {
sema.release();
}
private:
ACE_Semaphore sema;
};
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?