提问人:Dengzhi Zhang 提问时间:11/8/2023 最后编辑:Nicol BolasDengzhi Zhang 更新时间:11/8/2023 访问量:59
C++20 信号量的生产者和消费者问题
producer and consumer problem with c++20 semaphore
问:
这是使用改编自维基百科 https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem 的 c++20 信号量的生产者和消费者问题实现。我们还需要 std::lock_guardstd::mutex g(mtx);吗?
#include <thread>
#include <mutex>
#include <semaphore>
std::queue<int> q;
std::counting_semaphore<N> full{0};
std::counting_semaphore<N> empty{N};
std::mutex mtx;
void produce() {
for (;;) {
int item = 0;
empty.acquire();
{
std::lock_guard<std::mutex> g(mtx);
q.push(item);
}
full.release();
}
}
void consume() {
for (;;) {
full.acquire();
{
std::lock_guard<std::mutex> g(mtx);
int item = q.front();
q.pop();
}
empty.release();
}
}
int main() {
std::thread t1(producer);
std::thread t2(consumer);
t1.join();
t2.join();
}
据我了解,信号量已经排除了。为什么我们需要另一个lock_guard?
答: 暂无答案
评论