
Howard Hinnant wrote:
At this point I'm really leaning towards getting back to basics:
<snip options for class condition> It seems I wasn't very successful in convincing, so I'll try one last time. I strongly recommend you seriously consider template <class Mutex> class condition { condition(); explicit condition(Mutex &); // or Mutex* void set_mutex(Mutex &); // or Mutex* void wait(); // more wait() overloads with predicate and timeout // and of course the notify functions }; I'll repeat the advantages I see for this approach: 1. It can work for any user-defined mutex. 2. Yet it can be specialized for better sizeof for std::mutex. 3. It can be made to check for errors (not assigning a mutex or not locking the mutex) when calling wait(). 4. Yet it can be made to be as-fast-as-possible. 5. It can dynamically switch the mutex which the condition works for (for the rare cases when it is needed). 6. It allows easily using the condition in a deeper function than the one that locked the mutex. 7. It doesn't force using locks (which I see as a plus, because there's a reason we brought mutex back his lock/unlock). 8. It doesn't introduce an unprecedented technique of "encouraging" users to lock (by passing a lock to a function). A technique which I find to be cumbersome and misleading (because it works only partially). Unfortunately I have to leave in an hour for two weeks, so I'm out of this discussion for now, but please don't dismiss this idea without careful thought. Yuval