C++ 语言 标准库头文件 自立与有宿主实现 具名要求 语言支持库 概念库 (C++20) 诊断库 工具库 字符串库 容器库 迭代器库 范围库 (C++20) 算法库 数值库 本地化库 输入/输出库 文件系统库 (C++17) 正则表达式库 (C++11) 原子操作库 (C++11) 线程支持库 (C++11) 技术规范 线程支持库 线程thread(C++11)jthread(C++20)stop_token(C++20)stop_source(C++20)stop_callback(C++20)hardware_destructive_interference_sizehardware_constructive_interference_size(C++17)(C++17) this_thread 命名空间get_id(C++11)yield(C++11)sleep_for(C++11)sleep_until(C++11) 互斥mutex(C++11)recursive_mutex(C++11)shared_mutex(C++17)timed_mutex(C++11)recursive_timed_mutex(C++11)shared_timed_mutex(C++14) 通用锁管理lock_guard(C++11)scoped_lock(C++17)unique_lock(C++11)shared_lock(C++14)defer_lock_ttry_to_lock_tadopt_lock_t(C++11)(C++11)(C++11)lock(C++11)try_lock(C++11)defer_locktry_to_lockadopt_lock(C++11)(C++11)(C++11)once_flag(C++11)call_once(C++11) 条件变量condition_variable(C++11)condition_variable_any(C++11)notify_all_at_thread_exit(C++11)cv_status(C++11) 信号量counting_semaphorebinary_semaphore(C++20)(C++20) 闩与屏障latch(C++20)barrier(C++20) futurepromise(C++11)future(C++11)shared_future(C++11)packaged_task(C++11)async(C++11)launch(C++11)future_status(C++11)future_error(C++11)future_category(C++11)future_errc(C++11) 定义于头文件 templateint try_lock( Lockable1& lock1, Lockable2& lock2, LockableN&... lockn); (C++11 起)
尝试锁定每个给定的可锁定 (Lockable) 对象 lock1 、 lock2 、 ... 、 lockn ,通过以从头开始的顺序调用 try_lock 。
若调用 try_lock 失败,则不再进一步调用 try_lock ,并对任何已锁对象调用 unlock ,返回锁定失败对象的 0 底下标。
若调用 try_lock 抛出异常,则在重抛前对任何已锁对象调用 unlock 。
参数 lock1, lock2, ... , lockn - 要锁定的可锁定 (Lockable) 对象返回值
成功时为 -1 ,否则为锁定失败对象的 0 底下标值。
示例
下列示例用 std::try_lock 周期地记录并重置运行于分离线程的计数器。
运行此代码#include #include #include #include #include #include int main(){ int foo_count = 0; std::mutex foo_count_mutex; int bar_count = 0; std::mutex bar_count_mutex; int overall_count = 0; bool done = false; std::mutex done_mutex; auto increment = [](int &counter, std::mutex &m, const char *desc) { for (int i = 0; i