C++中的信號(hào)量(semaphore)是一種用于控制多個(gè)線程之間同步和互斥的機(jī)制
std::condition_variable
和std::mutex
:std::condition_variable
和std::mutex
是C++標(biāo)準(zhǔn)庫中提供的線程同步原語,它們可以簡(jiǎn)化信號(hào)量的實(shí)現(xiàn)。你可以使用這兩個(gè)原語來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的信號(hào)量類,如下所示:
#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_;
};
使用這個(gè)簡(jiǎn)單的信號(hào)量類,你可以更容易地在C++中實(shí)現(xiàn)線程同步和互斥。
std::atomic
:C++標(biāo)準(zhǔn)庫中的std::atomic
類型可以用于實(shí)現(xiàn)簡(jiǎn)單的信號(hào)量。原子操作是不可中斷的,因此可以用來實(shí)現(xiàn)計(jì)數(shù)信號(hào)量。以下是一個(gè)使用std::atomic
實(shí)現(xiàn)的簡(jiǎn)單信號(hào)量示例:
#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
實(shí)現(xiàn)的信號(hào)量類可以讓你更容易地在C++中實(shí)現(xiàn)線程同步和互斥。
總之,C++標(biāo)準(zhǔn)庫提供了許多用于線程同步和互斥的原語,如std::condition_variable
、std::mutex
和std::atomic
。這些原語可以幫助你簡(jiǎn)化信號(hào)量的實(shí)現(xiàn),從而使編程模型更加簡(jiǎn)潔。