std::timed_...ry_lock_for(3)
π
std::timed_mutex::try_lock_for π
Okay bestie, welcome to the C++ Standard Libary manual β this page is literally all about std::timed_mutex::try_lock_for, and yes the name is giving main-character energy because it's the same as the page title. π
β¨ NAME β¨
std::timed_mutex::try_lock_for β std::timed_mutex::try_lock_for
πΈ Synopsis πΈ
template< class Rep, class Period >
bool try_lock_for( const std::chrono::duration<Rep, Period>&
(since C++11)
timeout_duration );
So here's the vibe: it tries to lock the mutex. It blocks until either the specified duration timeout_duration has elapsed (timeout) or the lock is acquired (owns the mutex), whichever comes first. On successful lock acquisition it returns true; otherwise it returns false. β¨
If timeout_duration is less or equal timeout_duration.zero(), the function behaves like try_lock(). π«Ά
Heads up: this function may block for longer than timeout_duration due to scheduling or resource contention delays. Not a vibe, just facts. π
The standard recommends that a std::steady_clock is used to measure the duration. If an implementation uses a std::system_clock instead, the wait time may also be sensitive to clock adjustments. β°
As with try_lock(), this function is allowed to fail spuriously and return false even if the mutex was not locked by any other thread at some point during timeout_duration. So if it says no, it might just be being dramatic. π
Prior unlock() operation on the same mutex synchronizes-with (as defined in std::memory_order) this operation if it returns true. π§
π¨ If try_lock_for is called by a thread that already owns the mutex, the behavior is undefined. Do not do that, bestie.
π Parameters π
timeout_durationβ minimum duration to block for.
π Return value π
trueif the lock was acquired successfully, otherwisefalse.
π¦ Exceptions π¦
Any exception thrown by timeout_duration (durations provided by the standard library never throw).
π Example π
Run this code, bestie:
// Run this code
#include <chrono>
#include <iostream>
#include <mutex>
#include <sstream>
#include <thread>
#include <vector>
using namespace std::chrono_literals;
std::mutex cout_mutex; // control access to std::cout
std::timed_mutex mutex;
void job(int id)
{
std::ostringstream stream;
for (int i = 0; i < 3; ++i)
{
if (mutex.try_lock_for(100ms))
{
stream << "success ";
std::this_thread::sleep_for(100ms);
mutex.unlock();
}
else
stream << "failed ";
std::this_thread::sleep_for(100ms);
}
std::lock_guard<std::mutex> lock{cout_mutex};
std::cout << '[' << id << "] " << stream.str() << '\n';
}
int main()
{
std::vector<std::thread> threads;
for (int i{0}; i < 4; ++i)
threads.emplace_back(job, i);
for (auto& th : threads)
th.join();
}
π Possible output π
[0] failed failed failed
[3] failed failed success
[2] failed success failed
[1] success failed success
π Defect reports π
The following behavior-changing defect reports were applied retroactively to previously published C++ standards:
LWG 2093β Applied to:C++11; behavior as published:try_lock_forthrew nothing; correct behavior: throws timeout-related exceptions.
β See also β
lockβ locks the mutex, blocks if the mutex is not available (public member function)try_lockβ tries to lock the mutex, returns if the mutex is not available (public member function)try_lock_untilβ tries to lock the mutex, returns if the mutex has been unavailable until specified time point has been reached (public member function)unlockβ unlocks the mutex (public member function)
Okay that's the whole page β source: http://cppreference.com, date: 2024.06.10, page: std::timed_...ry_lock_for(3). Bye bestie, go forth and lock responsibly πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms