在C++中创建屏障可以使用互斥锁和条件变量来实现。屏障是一种同步机制,它允许多个线程在某个点上等待,直到所有线程都到达该点后才能继续执行。
以下是在C++中创建屏障的一种常见方法:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
class Barrier {
public:
explicit Barrier(std::size_t count) : count_(count), generation_(0) {}
void Wait() {
std::unique_lock<std::mutex> lock(mutex_);
auto gen = generation_;
if (--count_ == 0) {
generation_++;
count_ = static_cast<std::size_t>(gen);
cv_.notify_all();
} else {
cv_.wait(lock, [this, gen] { return gen != generation_; });
}
}
private:
std::mutex mutex_;
std::condition_variable cv_;
std::size_t count_;
std::size_t generation_;
};
Barrier barrier(3); // 假设有3个线程需要等待
void ThreadFunction() {
// 线程执行的代码
barrier.Wait(); // 等待其他线程到达屏障
// 继续执行其他代码
}
int main() {
std::thread t1(ThreadFunction);
std::thread t2(ThreadFunction);
std::thread t3(ThreadFunction);
t1.join();
t2.join();
t3.join();
return 0;
}
这样,当所有线程都调用了Wait()方法后,它们会在屏障处等待,直到所有线程都到达屏障后才能继续执行后续的代码。
需要注意的是,上述代码只是一种示例,实际使用时需要根据具体的需求进行适当的修改和扩展。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云