critical_section类型的API是非常简单的;你使用一个blocking lock方法来获取这个锁,non-blocking try_lock会试图去获取这个锁,如果它可用的话,而且unlock会释放一个锁住的critical_section。
reader_writer_lock是有一点点的复杂。它添加了两个方法,lock_read 和try_lock_read,可以支持获取一个reader lock。Unlock方法和critical_section是一样的,而且将释放恰当的基于锁类型的锁。
最后的同步原语是event,这是手动复位事件(即:事件保持设置直到用外部代码进行手动复位)。代码可以通过调用实例wait方法(也是支持一个可选的timeout值),等待一个单一事件被设置。当没有timeout被定义的时候,等待的时间是无限的。你可以等待多重事件,通过使用静态wait_for_multiple,它接受C-style的event pointers。wait_for_multiple方法等待一个单一事件或是所有的事件传递到方法调用。以下的代码等待这两个事件被设置:
event* events[2];
events[0] = new event();
events[1] = new event();
parallel_invoke(
[&]{ events[0]->set(); },
[&]{ events[1]->set(); }
);
bool waitForAllEvents = true;
event::wait_for_multiple(events, 2, waitForAllEvents);










