弱弱地发一个semaphore

Semaphore在有些场景下比条件变量好用。比如用一个Fence Value和一个条件变量来实现线程间同步,用一个信号量就可以等价替换。

以上是这个信号量实现的外观。模板参数SemaT的类型如果是void,信号量用std::condition_variable,std::mutex和一个flag值来模拟实现;不是void的时候,是一个policy参数,根据不同的平台适配不同的实现。

模拟的信号量实现,其实是simple_semaphore<void, false>这个特化实例。模拟的实现如下:

平台相关的实现,使用系统的API效率会更好一些。所以,继续对simple_semaphore特化,为平台相关的实现,实现一个外观。

平台相关的实现,具体就是要实现policy类,特化一个is_platform_semaphore这个traits. 这里暂时只实现了windows平台下的。

最后再根据平台来选择要使用的Semaphore实现

这个简单的semaphore只实现了wait()和signal()方法,而且初始化的时候提供了初始信号量为0的构造方法。当然也能应付大部分场景。

Copy Protected by Chetan's WP-Copyprotect.