open source

This commit is contained in:
lvfulong
2020-11-11 16:17:13 +08:00
parent 4d989f3ecb
commit bc4ca748de
2441 changed files with 623057 additions and 2 deletions
+40
View File
@@ -0,0 +1,40 @@
#include <condition_variable>
#include <thread>
namespace laya {
class semaphore {
unsigned int count_;
std::mutex mutex_;
std::condition_variable condition_;
public:
//构造一个semaphore 初始值为initial.
explicit semaphore(unsigned int initial) : count_(initial) {}
//增加计数,并且通知其他的wait醒来检查。
void signal() {
{
std::unique_lock<std::mutex> lock(mutex_);
++count_;
}
condition_.notify_one();
}
//等待,直到有人 signalsignal到count>0,wait成功会减count
void wait() {
std::unique_lock<std::mutex> lock(mutex_);
while (count_ == 0) {
condition_.wait(lock);
}
--count_;
}
//等待,如果没有人增加计数的的话在时间到后会醒来返回。成功会减count
//这个不会要求有count
void wait(int ms) {
std::unique_lock<std::mutex> lock(mutex_);
condition_.wait_until(lock, std::chrono::system_clock::now() + std::chrono::milliseconds(ms));
--count_;
}
};
}