1. try_lock用于锁定多个互斥锁。
2. try_lock用于通过使用try_lock成员函数来锁定对象。
3.这是一个非阻塞呼叫
4.尝试按给定顺序锁定所有对象
5.成功时将返回-1,否则将返回无法锁定的基于0的互斥体索引号
6.如果无法锁定任何互斥锁,则它将释放之前锁定的所有互斥锁。
7.如果对try_lock的调用导致异常,则在重新抛出之前,将对所有锁定的对象调用unlock。
例:
#include <iostream> // std::cout #include <future> // std::async, std::future #include <chrono> // std::chrono::milliseconds #include <thread> // std::thread #include <mutex> // std::timed_mutex // for more tutorials visit www.ProDeveloperTutorial.com using namespace std; std::mutex m1, m2; void task_a () { m1.lock(); std::cout << "task a\n"; m2.lock(); m1.unlock(); m2.unlock(); } void task_b () { int x = try_lock(m2,m1); if (x==-1) { std::cout << "task b\n"; m2.unlock(); m1.unlock(); } else { std::cout << "[task b failed: mutex " << (x?"m1":"m2") << " locked]\n"; } } int main () { std::thread th1 (task_a); std::thread th2 (task_b); th1.join(); th2.join(); return 0; }
输出:
task a [task b failed: mutex m1 locked]
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |