c++多线程加锁的方法是什么

avatar
作者
猴君
阅读量:0

C++中多线程加锁的方法有多种,以下是常见的几种方法:

  1. 互斥锁(mutex):使用std::mutex类来实现,可以使用lock()函数来获取锁,unlock()函数来释放锁。
#include <mutex> #include <thread>  std::mutex mtx;  void threadFunction() {     std::lock_guard<std::mutex> lock(mtx); // 获取锁     // 临界区代码     // ...     // 释放锁 }  int main() {     std::thread t1(threadFunction);     std::thread t2(threadFunction);      t1.join();     t2.join();      return 0; } 
  1. 递归锁(recursive_mutex):和互斥锁类似,但支持同一线程多次获得锁。
#include <mutex> #include <thread>  std::recursive_mutex mtx;  void threadFunction() {     std::lock_guard<std::recursive_mutex> lock(mtx); // 获取锁     // 临界区代码     // ...     // 释放锁 }  int main() {     std::thread t1(threadFunction);     std::thread t2(threadFunction);      t1.join();     t2.join();      return 0; } 
  1. 条件变量(condition_variable):用于线程间的等待和唤醒操作,结合互斥锁使用。
#include <condition_variable> #include <mutex> #include <thread>  std::mutex mtx; std::condition_variable cv;  void threadFunction() {     std::unique_lock<std::mutex> lock(mtx); // 获取锁     // 等待条件满足     cv.wait(lock);      // 临界区代码     // ...     // 释放锁 }  int main() {     std::thread t1(threadFunction);     std::this_thread::sleep_for(std::chrono::seconds(1));          // 唤醒等待线程     cv.notify_one();      t1.join();      return 0; } 

以上是常用的几种多线程加锁的方法,根据具体的需求和场景选择合适的方法。同时,还可以使用其他的锁机制,如读写锁(std::shared_mutex)、自旋锁(std::atomic_flag)等。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!