C++ 库 - <mutex>



C++ 中的<mutex> 头文件提供了一组用于管理多线程环境中共享资源访问的工具。当多个线程尝试同时访问同一个资源时,可能会发生数据竞争。此库通过允许控制对共享资源的访问来帮助防止这些问题,确保在任何给定时间只有一个线程可以使用特定资源。

<mutex> 的工作原理是,当线程需要访问资源时锁定该资源,其他尝试使用相同资源的线程必须等待当前线程解锁互斥锁。此库还包括其他同步原语,如 recursive_mutex、timed_mutex 和 shared_mutex,它们提供了适合不同用例的特定功能。

包含 <mutex> 头文件

要在您的 C++ 程序中包含 <mutex> 头文件,您可以使用以下语法。

#include <mutex>

<mutex> 头文件的函数

以下是 <mutex> 头文件中所有函数的列表。

序号 函数及描述
1 lock

它锁定指定的互斥锁。

2 try_lock

它尝试锁定互斥锁。

3 unlock

它解锁互斥锁。

4 native_handle

它返回底层实现。

保护共享数据

在以下示例中,我们将使用互斥锁来确保一次只有一个线程可以访问共享数据。

#include <iostream>
#include <mutex>
#include <thread>
std::mutex a;
int b = 0;
void increment() {
   for (int x = 0; x < 1123; ++x) {
      a.lock();
      ++b;
      a.unlock();
   }
}
int main() {
   std::thread x1(increment);
   std::thread x2(increment);
   x1.join();
   x2.join();
   std::cout << "Result : " << b << std::endl;
   return 0;
}

输出

以上代码的输出如下:

Result : 2246

自动锁定和解锁

考虑以下示例,我们将使互斥锁自动锁定和解锁。

#include <iostream>
#include <thread>
#include <mutex>
std::mutex a;
int b = 0;
void increment() {
   std::lock_guard < std::mutex > lock(a);
   ++b;
}
int main() {
   std::thread x1(increment);
   std::thread x2(increment);
   x1.join();
   x2.join();
   std::cout << "Result : " << b << std::endl;
   return 0;
}

输出

以下是以上代码的输出:

Result : 2
广告