OpenThreads.Barrier是OpenThreads库中的一个类,用于实现线程同步。
OpenThreads.Barrier提供了一种线程同步机制,使得一组线程能够等待在同一个同步点处并且不会继续执行直到所有线程都到达。
Barrier对象在创建时需要指定等待线程的数量,当等待线程的数量被满足时,Barrier对象将释放所有的等待线程。
Barrier(unsigned int count);
参数count指定等待的线程数量。
void block();
把调用线程加入到等待线程队列,并阻塞线程,直到所有等待线程都到达。
bool block(unsigned int timeoutMilliseconds);
把调用线程加入到等待线程队列,并阻塞线程,直到所有等待线程都到达或者超时。
参数timeoutMilliseconds指定超时时间,单位为毫秒。
如果在超时时间内所有等待线程都到达,则返回true。否则返回false。
void unblock();
释放所有等待线程。
void reset();
重置Barrier对象,使其可以再次使用。需要重新指定等待线程的数量。
#include <OpenThreads/Barrier.h>
#include <vector>
#include <thread>
#include <iostream>
OpenThreads::Barrier barrier(5);
void thread_func(int id) {
std::cout << "Thread " << id << " started." << std::endl;
barrier.block();
std::cout << "Thread " << id << " resumed." << std::endl;
}
int main() {
std::vector<std::thread> threads;
for(int i = 0; i < 5; ++i) {
threads.emplace_back(&thread_func, i);
}
for(auto& thread : threads) {
thread.join();
}
return 0;
}
输出:
Thread 0 started.
Thread 4 started.
Thread 1 started.
Thread 3 started.
Thread 2 started.
Thread 0 resumed.
Thread 1 resumed.
Thread 2 resumed.
Thread 3 resumed.
Thread 4 resumed.
在这个例子中,5个线程同时启动,然后调用barrier.block()等待所有线程到达Barrier点。当所有线程都到达Barrier点时,它们都将打印"Thread X resumed.",表明它们已经继续执行。