亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

c++多線程加鎖的方法是什么

c++
小億
120
2023-11-23 04:39:14
欄目: 編程語言

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)等。

0
广饶县| 康乐县| 清新县| 斗六市| 辛集市| 天祝| 通州市| 亳州市| 宣化县| 营山县| 安福县| 四川省| 读书| 夏津县| 宁强县| 建昌县| 九江县| 措勤县| 古浪县| 长海县| 苍南县| 周宁县| 西峡县| 尉氏县| 湛江市| 应城市| 孟州市| 新昌县| 霍林郭勒市| 宁海县| 武乡县| 延长县| 浏阳市| 阿拉善右旗| 泾源县| 岳阳县| 库尔勒市| 永平县| 枞阳县| 西藏| 永春县|