C++互斥鎖如何實(shí)現(xiàn)線程同步

c++
小樊
81
2024-11-09 06:54:36

在C++中,互斥鎖(mutex)是一種同步原語(yǔ),用于確保多個(gè)線程在訪問共享資源時(shí)不會(huì)發(fā)生沖突。C++標(biāo)準(zhǔn)庫(kù)中的<mutex>頭文件提供了互斥鎖的實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用互斥鎖實(shí)現(xiàn)線程同步:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx; // 創(chuàng)建一個(gè)互斥鎖
int shared_data = 0; // 定義一個(gè)共享數(shù)據(jù)

// 線程函數(shù)
void thread_func(int num_iterations) {
    for (int i = 0; i < num_iterations; ++i) {
        mtx.lock(); // 加鎖
        ++shared_data; // 修改共享數(shù)據(jù)
        mtx.unlock(); // 解鎖
    }
}

int main() {
    const int num_threads = 5;
    const int iterations_per_thread = 1000;

    std::thread threads[num_threads]; // 創(chuàng)建線程數(shù)組

    // 啟動(dòng)線程
    for (int i = 0; i < num_threads; ++i) {
        threads[i] = std::thread(thread_func, iterations_per_thread);
    }

    // 等待所有線程完成
    for (int i = 0; i < num_threads; ++i) {
        threads[i].join();
    }

    std::cout << "Final value of shared_data: " << shared_data << std::endl;

    return 0;
}

在這個(gè)示例中,我們創(chuàng)建了一個(gè)互斥鎖mtx和一個(gè)共享數(shù)據(jù)shared_data。我們創(chuàng)建了5個(gè)線程,每個(gè)線程執(zhí)行thread_func函數(shù),該函數(shù)對(duì)shared_data進(jìn)行遞增操作。在thread_func中,我們使用mtx.lock()加鎖,然后修改共享數(shù)據(jù),最后使用mtx.unlock()解鎖。這樣可以確保在同一時(shí)間只有一個(gè)線程可以訪問和修改共享數(shù)據(jù),從而實(shí)現(xiàn)線程同步。

0