Section: 32.6.4.2.2 [thread.mutex.class] Status: Dup Submitter: Herb Sutter Opened: 2008-09-18 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [thread.mutex.class].
View all issues with Dup status.
Duplicate of: 893
Discussion:
A few questions on the current WP, N2723:
32.6.4 [thread.mutex.requirements]/24 says an expression
mut.unlock()
"Throws: Nothing." I'm assuming that, per 99 [res.on.required], errors that violate the precondition "The
calling thread shall own the mutex" opens the door for throwing an
exception anyway, such as to report unbalanced unlock operations and
unlocking from a thread that does not have ownership. Right?
32.6.4.2.2 [thread.mutex.class]/3 (actually numbered paragraph "27" in the WP; this is just a typo I think) says
The behavior of a program is undefined if:
- it destroys a
mutex
object owned by any thread,- a thread that owns a
mutex
object callslock()
ortry_lock()
on that object, or- a thread terminates while owning a
mutex
object.
As already discussed, I think the second bullet should be removed, and
such a lock()
or try_lock()
should fail with an
exception or returning false
, respectively.
A potential addition to the list would be
mutex
it does not have ownership of.but without that the status quo text endorses the technique of the program logically transferring ownership of a mutex to another thread with correctness enforced by programming discipline. Was that intended?
[ Summit: ]
Two resolutions: "not a defect" and "duplicate", as follows:
- 32.6.4 [thread.mutex.requirements]/24: NAD. If the precondition fails the program has undefined behaviour and therefore an implementation may throw an exception already.
- 32.6.4.2.2 [thread.mutex.class]/3 bullet 2: Already addressed by issue 893.
- 32.6.4.2.2 [thread.mutex.class]/3 proposed addition: NAD. This is already covered by the mutex requirements, which have ownership as a Precondition.
Proposed resolution: