企业官方网站制作,阿里云网站建设方案,安康创宇网站制作建设,静态网站怎么建设Baton
folly::Baton 是 Facebook 开源的一个同步原语#xff0c;它提供了一种简单而灵活的方式来进行线程间的同步。它属于 Folly 库#xff0c;是 C 编程语言的一个组件。
Baton 通常用作线程间同步、等待、通知的标识符号#xff0c;常用姿势是#xff0c;一些线程调用…Baton
folly::Baton 是 Facebook 开源的一个同步原语它提供了一种简单而灵活的方式来进行线程间的同步。它属于 Folly 库是 C 编程语言的一个组件。
Baton 通常用作线程间同步、等待、通知的标识符号常用姿势是一些线程调用 wait() 方法等待另一些线程完成某项工作其完成以后调用 post() 方法进行通知。 其跟一般PV信号量的区别是Baton更轻量化、通知策略更简单(没有FILO/FIFO等策略)、仅能够通知一次在简单场景中更高效。
所在头文件
#include folly/synchronization/Baton.hBaton 用于同步线程间的PV (block/wakeup)但是不像 semaphores信号量那样可以多次pvbaton 仅支持单次pv操作folly::Future 中的block/wakeup 就是使用 Baton 来实现的。
folly::Baton 的主要特点 阻塞和唤醒使用 folly::Baton一个线程可以在一个特定的条件下阻塞直到其他的线程通过唤醒操作通知它可以继续执行。这种阻塞和唤醒的机制可以帮助线程之间进行同步保证线程按照预期的顺序执行。 轻量级folly::Baton 是一种轻量级的同步原语它的实现是基于一些底层的同步机制如条件变量和互斥锁。它不会引入额外的线程开销或内存开销因此非常适合在性能要求较高的场景中使用。 灵活性folly::Baton 提供了多种等待和唤醒的方式可以根据具体的需求选择最适合的方式。例如可以使用 folly::Baton::wait() 函数进行阻塞等待或者使用 folly::Baton::try_wait() 函数进行非阻塞的尝试等待。 适用范围folly::Baton 可以用于广泛的场景例如实现生产者-消费者模型、控制多个线程的执行顺序、等待异步操作完成等。
folly::Baton 可以在 C 程序中实现线程间的协调与同步操作。
基本方法
bool Baton::ready(); // 测试是否已经被标记置位
void Baton::post(); // 置位
bool Baton::try_wait(); // 等同 ready
// 等待直到被置位可以传入一个 wait_options 来控制 spin 的最大时间默认2us
void Baton::wait(const WaitOptions opt wait_options());示例
#include folly/synchronization/Baton.h
#include folly/concurrency/DynamicBoundedQueue.h
#include iostream
#include thread
#include glog/logging.hint main(){folly::Batontrue finish;LOG(INFO) finish.ready();folly::DSPSCQueueint, true array_cache(25);int times 0;std::thread t1([]{LOG(INFO) Run thread t1;while(!finish.ready()){times ;array_cache.enqueue(times);LOG(INFO) array_cache.size() enqueue;}LOG(INFO) end thread finish.ready();});LOG(INFO) proc finish;finish.post();LOG(INFO) finish.ready();LOG(INFO) finish post;LOG(INFO) --------------;t1.join();return 0;
}