Мьютекс с таймаутом в C++
Предел по времени к обычному замку добавляет
std::timed_mutex: попытка захвата
берется из заголовка #include <chrono>.
Главный поток удержит lock, рабочий проверит
try_lock_for и сообщит результат:
#include <chrono>
#include <iostream>
#include <mutex>
#include <thread>
int main() {
std::timed_mutex mx;
mx.lock();
std::thread worker([&]() {
bool ok = mx.try_lock_for(std::chrono::milliseconds(2));
if (ok) {
std::cout << "got\n";
mx.unlock();
} else {
std::cout << "wait\n";
}
});
mx.unlock();
worker.join();
return 0;
}
Удерживайте std::timed_mutex в main, пока другой поток пробует try_lock_for на 3 мс. Освободите замок до join.