m.try_lock_for()
Section: 32.6.4.3 [thread.timedmutex.requirements] Status: C++14 Submitter: Pete Becker Opened: 2011-10-18 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [thread.timedmutex.requirements].
View all issues with C++14 status.
Discussion:
32.6.4.3 [thread.timedmutex.requirements]/4 says, in part,
"Requires: If the tick period of [the argument] is not exactly convertible … [it] shall be rounded up …"
This doesn't belong in the requires clause. It's an effect. It belongs in paragraph 5. Nitpickingly, this would be a technical change: as written it imposes an obligation on the caller, while moving it imposes an obligation on the callee. Although that's certainly not what was intended.
Peter Dimov comments: Not to mention that it should round down, not up. :-) Incidentally, I see that the wrongtry_lock
requirement that the caller shall not own
the mutex has entered the standard, after all. Oh well. Let's hope that the real world
continues to ignore it.
[2012, Kona]
Remove the offending sentence from the requirements clause. Do not add it back anywhere else. The implementation already must have license to wake up late, so the rounding is invisible.
Move to Review.[2012, Portland]
Concurrency move to Ready.
[2013-04-20 Bristol]
Proposed resolution:
This wording is relative to N3337.
Change 32.6.4.3 [thread.timedmutex.requirements]/4 as indicated:
-3- The expression
-4- Requires:m.try_lock_for(rel_time)
shall be well-formed and have the following semantics:If the tick period ofIfrel_time
is not exactly convertible to the native tick period, the duration shall be rounded up to the nearest native tick period.m
is of typestd::timed_mutex
, the calling thread does not own the mutex.