Section: 32.6.5.4.3 [thread.lock.unique.locking] Status: C++11 Submitter: Pete Becker Opened: 2009-01-07 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [thread.lock.unique.locking].
View all issues with C++11 status.
Discussion:
32.6.5.4.3 [thread.lock.unique.locking]: unique_lock::lock
is
required to throw an object of type std::system_error
"when the
postcondition cannot be achieved." The postcondition is owns == true
,
and this is trivial to achieve. Presumably, the requirement is intended
to mean something more than that.
[ Summit: ]
Move to open.
[ Beman has volunteered to provide proposed wording. ]
[ 2009-07-21 Beman added wording to address 32.2.2 [thread.req.exception] in response to the Frankfurt notes in 859. ]
[ 2009-09-25 Beman: minor update to wording. ]
[ 2009-10 Santa Cruz: ]
Move to Ready.
Proposed resolution:
Change Exceptions 32.2.2 [thread.req.exception] as indicated:
Some functions described in this Clause are specified to throw exceptions of type
system_error
(19.5.5). Such exceptions shall be thrown if any of the Error conditions are detected or a call to an operating system or other underlying API results in an error that prevents the library function fromsatisfying its postconditions or from returning a meaningful valuemeeting its specifications. Failure to allocate storage shall be reported as described in 16.4.6.13 [res.on.exception.handling].
Change thread assignment 32.4.3.6 [thread.thread.member], join(), paragraph 8 as indicated:
Throws:
std::system_error
whenthe postconditions cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change thread assignment 32.4.3.6 [thread.thread.member], detach(), paragraph 13 as indicated:
Throws:
std::system_error
whenthe effects or postconditions cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change Mutex requirements 32.6.4 [thread.mutex.requirements], paragraph 11, as indicated:
Throws:
std::system_error
whenthe effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change unique_lock locking 32.6.5.4.3 [thread.lock.unique.locking], paragraph 3, as indicated:
Throws:
std::system_error
whenthe postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change unique_lock locking 32.6.5.4.3 [thread.lock.unique.locking], paragraph 8, as indicated:
Throws:
std::system_error
whenthe postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change unique_lock locking 32.6.5.4.3 [thread.lock.unique.locking], paragraph 13, as indicated:
Throws:
std::system_error
whenthe postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change unique_lock locking 32.6.5.4.3 [thread.lock.unique.locking], paragraph 18, as indicated:
Throws:
std::system_error
whenthe postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change unique_lock locking 32.6.5.4.3 [thread.lock.unique.locking], paragraph 22, as indicated:
Throws:
std::system_error
whenthe postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change Function call_once 32.6.7.2 [thread.once.callonce], paragraph 4, as indicated
Throws:
std::system_error
whenthe effects cannot be achievedan exception is required (32.2.2 [thread.req.exception]), or any exception thrown byfunc
.
Change Class condition_variable 32.7.4 [thread.condition.condvar], paragraph 12, as indicated:
Throws:
std::system_error
whenthe effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change Class condition_variable 32.7.4 [thread.condition.condvar], paragraph 19, as indicated:
Throws:
std::system_error
whenthe effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change Class condition_variable_any 32.7.5 [thread.condition.condvarany], paragraph 10, as indicated:
Throws:
std::system_error
whenthe effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Change Class condition_variable_any 32.7.5 [thread.condition.condvarany], paragraph 16, as indicated:
Throws:
std::system_error
whenthe returned value, effects, or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Assuming issue 859, Monotonic Clock is Conditionally Supported?, has been applied to the working paper, change Change 32.7.4 [thread.condition.condvar] as indicated:
template <class Rep, class Period> bool wait_for(unique_lock<mutex>& lock, const chrono::duration<Rep, Period>& rel_time);...Throws:
std::system_error
whenthe effects or postcondition cannot be achievedan exception is required ([thread.req.exception]).
Assuming issue 859, Monotonic Clock is Conditionally Supported?, has been applied to the working paper, change Change 32.7.4 [thread.condition.condvar] as indicated:
template <class Rep, class Period, class Predicate> bool wait_for(unique_lock<mutex>& lock, const chrono::duration<Rep, Period>& rel_time, Predicate pred);...Throws:
std::system_error
whenthe effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Assuming issue 859, Monotonic Clock is Conditionally Supported?, has been applied to the working paper, change 32.7.5 [thread.condition.condvarany] as indicated:
template <class Lock, class Rep, class Period> bool wait_for(Lock& lock, const chrono::duration<Rep, Period>& rel_time);...Throws:
std::system_error
whenthe returned value, effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).
Assuming issue 859, Monotonic Clock is Conditionally Supported?, has been applied to the working paper, change 32.7.5 [thread.condition.condvarany] as indicated:
template <class Lock, class Rep, class Period, class Predicate> bool wait_for(Lock& lock, const chrono::duration<Rep, Period>& rel_time, Predicate pred);...Throws:
std::system_error
whenthe returned value, effects or postcondition cannot be achievedan exception is required (32.2.2 [thread.req.exception]).