信号量函数C++
时间: 2023-07-11 09:10:50 浏览: 89
C++信号量使用
C++标准库中并没有提供专门的信号量函数。不过,可以通过使用互斥锁和条件变量等基本的同步原语来实现信号量。
以下是一个使用互斥锁和条件变量实现信号量的示例代码:
```
#include <mutex>
#include <condition_variable>
class Semaphore {
public:
Semaphore(int count = 0) : count_(count) {}
void notify() {
std::unique_lock<std::mutex> lock(mutex_);
++count_;
cv_.notify_one();
}
void wait() {
std::unique_lock<std::mutex> lock(mutex_);
while (count_ == 0) {
cv_.wait(lock);
}
--count_;
}
private:
std::mutex mutex_;
std::condition_variable cv_;
int count_;
};
```
在上述代码中,通过互斥锁mutex_和条件变量cv_来实现对信号量的同步控制。其中,notify()方法用于解锁,wait()方法用于加锁。
示例代码:
```
Semaphore sem(0); // 初始化信号量计数器为0
void func1() {
// do something
sem.notify(); // 解锁
}
void func2() {
sem.wait(); // 加锁
// do something
}
```
在上述示例中,当调用func1()时,会执行一些操作后调用sem.notify()方法来解锁;当调用func2()时,会先调用sem.wait()方法来加锁,如果此时信号量计数器为0,则阻塞等待;当sem.notify()方法被调用后,信号量计数器增加,func2()方法被唤醒并继续执行。
阅读全文