C++中的信号量(semaphore)是一种用于控制多个线程之间同步和互斥的机制
std::condition_variable和std::mutex:std::condition_variable和std::mutex是C++标准库中提供的线程同步原语,它们可以简化信号量的实现。你可以使用这两个原语来实现一个简单的信号量类,如下所示:
#include <iostream> #include <mutex> #include <condition_variable> class SimpleSemaphore { public: SimpleSemaphore(int count) : 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: int count_; std::mutex mutex_; std::condition_variable cv_; }; 使用这个简单的信号量类,你可以更容易地在C++中实现线程同步和互斥。
std::atomic:C++标准库中的std::atomic类型可以用于实现简单的信号量。原子操作是不可中断的,因此可以用来实现计数信号量。以下是一个使用std::atomic实现的简单信号量示例:
#include <iostream> #include <atomic> class AtomicSemaphore { public: AtomicSemaphore(int count) : count_(count) {} void notify() { ++count_; } void wait() { while (!count_.fetch_sub(1)) { // Wait until count_ becomes positive } } private: std::atomic<int> count_; }; 使用std::atomic实现的信号量类可以让你更容易地在C++中实现线程同步和互斥。
总之,C++标准库提供了许多用于线程同步和互斥的原语,如std::condition_variable、std::mutex和std::atomic。这些原语可以帮助你简化信号量的实现,从而使编程模型更加简洁。