It is not clear from the documentation。此模板函数返回void。该文件提到 -
如果该功能无法锁定所有对象,则该功能首先解锁 失败前它成功锁定的所有对象(如果有的话)。
但是如何打电话者知道它失败了? 它是否会成功阻止,异常是唯一的失败情形?
答案 0 :(得分:2)
It throws an error on any issue.
正如其他SO成员过去在我自己提出的问题上提到的那样,请远离 CPlusPlus.com - The Canonical Reference for Misinformation 。
请以此为契机,了解c和c++之间的差异。 C要求函数参数返回代码或副作用,而C ++除了上述内容外还提供exceptions。
(无)
(无)
发生错误时抛出std :: system_error,包括来自的错误 底层操作系统会阻止锁定来满足它 规格。在任何异常情况下,互斥锁都不会被锁定 被抛出。
lock()通常不直接调用:std :: unique_lock和 std :: lock_guard用于管理独占锁定。
此示例显示了如何使用锁定和解锁来保护共享 数据
#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>
int g_num = 0; // protected by g_num_mutex
std::mutex g_num_mutex;
void slow_increment(int id)
{
for (int i = 0; i < 3; ++i) {
g_num_mutex.lock();
++g_num;
std::cout << id << " => " << g_num << '\n';
g_num_mutex.unlock();
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main()
{
std::thread t1(slow_increment, 0);
std::thread t2(slow_increment, 1);
t1.join();
t2.join();
}