sorry, but i strongly disagree: i think that boost is the place for high-performance code, that power users can rely on. i don't know how many `power users' have to maintain abstractions for low-level primitives. regarding semaphores, can you please mention one operating system, that does not support them natively?
I agree. But we should also try to guess what memory order guarantees should a boost/standard semaphore offer. Interprocess currently uses full-fence operations on spin-semaphores (just like in other primivites, like mutexes, which is too strong for mutexes and maybe for semaphores).
To be used as a binary semaphore, I guess wait()/post() could be just acquire/release. But I don't know if this applies to counting semaphores (and specially get_value(). I can read an old thread on this:
https://groups.google.com/forum/#!topic/comp.programming.threads/HpUwUUjgLK8
i was also under the impression that wait/post should be acquire/release, both for semaphores and for events. get_value() may need some special care, but i'm not planning to add this to the sync::semaphore interface, because it is not widely supported: neither mach nor dispatch semaphores provide an API for accessing the semaphore count. cheers, tim