mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-25 20:22:30 +01:00
34 lines
446 B
C
34 lines
446 B
C
|
#pragma once
|
||
|
|
||
|
class SSemaphore
|
||
|
{
|
||
|
const u32 m_max;
|
||
|
u32 m_count;
|
||
|
std::mutex m_mutex, m_cv_mutex;
|
||
|
std::condition_variable m_cond;
|
||
|
|
||
|
public:
|
||
|
SSemaphore(u32 value, u32 max = 1)
|
||
|
: m_max(max > 0 ? max : 0xffffffff)
|
||
|
, m_count(value > m_max ? m_max : value)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
SSemaphore()
|
||
|
: m_max(0xffffffff)
|
||
|
, m_count(0)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
~SSemaphore()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
bool wait(u64 timeout = 0);
|
||
|
|
||
|
bool try_wait();
|
||
|
|
||
|
void post(u32 value = 1);
|
||
|
|
||
|
bool post_and_wait();
|
||
|
};
|