On 18 September 2013 11:33, Tim Blechmann wrote:
also, checking the condition requires you to acquire a lock, which in
Right, to use a condition_variable you need the CV, a lock and a condition. If you don't have those three things you're using it wrong,
many use cases is not necessary. and locks are not free, as they involve memory barriers and atomic operations. and how many platforms implement PI mutexes?
Don't semaphores involve memory barriers and/or atomics too? POSIX semaphores do. (N.B. I'm not disputing that semaphores have less overhead than CVs.)
condition_variables have their use, but stating that other synchronization primitives are more error-prone to use is just wrong!
I didn't state that. I was only commenting on the assertion that the API is crippled by not detecting spurious wakeups. The claim that semaphores are error-prone comes from something called Boost.Threads, whatever that is, but it does at least give references: http://www.boost.org/doc/libs/1_31_0/libs/thread/doc/faq.html#question10