mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-15 01:10:52 +08:00
90 lines
1.4 KiB
C++
90 lines
1.4 KiB
C++
#pragma once
|
|
#include "fiber_cpp_define.hpp"
|
|
|
|
struct ACL_FIBER_LOCK;
|
|
struct ACL_FIBER_RWLOCK;
|
|
|
|
namespace acl {
|
|
|
|
/**
|
|
* 仅能用于同一线程内部的协程之间进行互斥的互斥锁
|
|
*/
|
|
class FIBER_CPP_API fiber_lock {
|
|
public:
|
|
fiber_lock(void);
|
|
~fiber_lock(void);
|
|
|
|
/**
|
|
* 等待互斥锁
|
|
* @return {bool} 返回 true 表示加锁成功,否则表示内部出错
|
|
*/
|
|
bool lock(void);
|
|
|
|
/**
|
|
* 尝试等待互斥锁
|
|
* @return {bool} 返回 true 表示加锁成功,否则表示锁正在被占用
|
|
*/
|
|
bool trylock(void);
|
|
|
|
/**
|
|
* 互斥锁拥有者释放锁并通知等待者
|
|
* @return {bool} 返回 true 表示通知成功,否则表示内部出错
|
|
*/
|
|
bool unlock(void);
|
|
|
|
private:
|
|
ACL_FIBER_LOCK* lock_;
|
|
|
|
fiber_lock(const fiber_lock&);
|
|
void operator=(const fiber_lock&);
|
|
};
|
|
|
|
/**
|
|
* 仅能用在同一线程内的协程之间进行互斥的读写锁
|
|
*/
|
|
class FIBER_CPP_API fiber_rwlock {
|
|
public:
|
|
fiber_rwlock(void);
|
|
~fiber_rwlock(void);
|
|
|
|
/**
|
|
* 加读锁
|
|
*/
|
|
void rlock(void);
|
|
|
|
/**
|
|
* 尝试加读锁
|
|
* @return {bool} 返回 true 表示加锁成功,否则表示锁正在被占用
|
|
*/
|
|
bool tryrlock(void);
|
|
|
|
/**
|
|
* 解读锁
|
|
*/
|
|
void runlock(void);
|
|
|
|
/**
|
|
* 加写锁
|
|
*/
|
|
void wlock(void);
|
|
|
|
/**
|
|
* 尝试加写锁
|
|
* @return {bool} 返回 true 表示加锁成功,否则表示锁正在被占用
|
|
*/
|
|
bool trywlock(void);
|
|
|
|
/**
|
|
* 解写锁
|
|
*/
|
|
void wunlock(void);
|
|
|
|
private:
|
|
ACL_FIBER_RWLOCK* rwlk_;
|
|
|
|
fiber_rwlock(const fiber_rwlock&);
|
|
void operator=(const fiber_rwlock&);
|
|
};
|
|
|
|
} // namespace acl
|