
Howard Hinnant wrote:
I realize that this is stricter than POSIX, however I'm not sure that the difference in strictness has a practical consequence. We're talking about a condition which would be waited on with mutex1 by a group of threads, and then at some later date (synchronized properly so as not to overlap) waited on with mutex2. Do you have motivating use cases needing this functionality?
No, but I also have no motivating use cases needing the check when the condition has been default-constructed.
As far as overhead goes, I'm more concerned about space overhead than performance overhead. On Mac, sizeof(pthread_cond_t) is 28, and sizeof(pthread_mutex_t) is 44. I would really like for there to be be an option for sizeof(std::condition) to be as close to 44 as possible. Consider:
class MyClass { std::tr2::upgrade_mutex mut_; ... };
MyClass already has two std::condition's buried under the upgrade_mutex (at least by my reference implementation).
I believe that the main cost of a mutex or a condition is measured in kernel objects, not bytes. One will typically run out of kernel memory much earlier, IMO.