Files
2025-10-25 03:02:53 +03:00

6.5 KiB

[thread.sharedtimedmutex.requirements.general]

32 Concurrency support library [thread]

32.6 Mutual exclusion [thread.mutex]

32.6.4 Mutex requirements [thread.mutex.requirements]

32.6.4.5 Shared timed mutex types [thread.sharedtimedmutex.requirements]

32.6.4.5.1 General [thread.sharedtimedmutex.requirements.general]

1

#

The standard library type shared_timed_mutex is ashared timed mutex type.

Shared timed mutex types meet the requirements of timed mutex types ([thread.timedmutex.requirements]), shared mutex types ([thread.sharedmutex.requirements]), and additionally meet the requirements set out below.

In this description,m denotes an object of a shared timed mutex type,rel_time denotes an object of an instantiation ofduration ([time.duration]), andabs_time denotes an object of an instantiation oftime_point.

[Note 1:

The shared timed mutex types meet the Cpp17SharedTimedLockable requirements ([thread.req.lockable.shared.timed]).

— end note]

2

#

The expression m.try_lock_shared_for(rel_time) is well-formed and has the following semantics:

3

#

Preconditions: The calling thread has no ownership of the mutex.

4

#

Effects: Attempts to obtain shared lock ownership for the calling thread within the relative timeout ([thread.req.timing]) specified by rel_time.

If the time specified by rel_time is less than or equal to rel_time.zero(), the function attempts to obtain ownership without blocking (as if by callingtry_lock_shared()).

The function returns within the timeout specified by rel_time only if it has obtained shared ownership of the mutex object.

[Note 2:

As with try_lock(), there is no guarantee that ownership will be obtained if the lock is available, but implementations are expected to make a strong effort to do so.

— end note]

If an exception is thrown then a shared lock has not been acquired for the current thread.

5

#

Synchronization: If try_lock_shared_for() returns true, priorunlock() operations on the same object synchronize with ([intro.multithread]) this operation.

6

#

Return type: bool.

7

#

Returns: true if the shared lock was acquired, otherwise false.

8

#

Throws: Timeout-related exceptions ([thread.req.timing]).

9

#

The expression m.try_lock_shared_until(abs_time) is well-formed and has the following semantics:

10

#

Preconditions: The calling thread has no ownership of the mutex.

11

#

Effects: The function attempts to obtain shared ownership of the mutex.

Ifabs_time has already passed, the function attempts to obtain shared ownership without blocking (as if by calling try_lock_shared()).

The function returns before the absolute timeout ([thread.req.timing]) specified by abs_time only if it has obtained shared ownership of the mutex object.

[Note 3:

As with try_lock(), there is no guarantee that ownership will be obtained if the lock is available, but implementations are expected to make a strong effort to do so.

— end note]

If an exception is thrown then a shared lock has not been acquired for the current thread.

12

#

Synchronization: If try_lock_shared_until() returns true, priorunlock() operations on the same object synchronize with ([intro.multithread]) this operation.

13

#

Return type: bool.

14

#

Returns: true if the shared lock was acquired, otherwise false.

15

#

Throws: Timeout-related exceptions ([thread.req.timing]).