91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++多線程之使用Mutex和Critical_Section

c++
小云
105
2023-09-11 11:58:26
欄目: 編程語言

在C++中,我們可以使用互斥鎖(Mutex)和臨界區(Critical Section)來實現多線程同步。

Mutex:

互斥鎖是一種同步機制,它用于確保只有一個線程能夠訪問共享資源。當一個線程獲得了互斥鎖后,其他線程必須等待該線程釋放鎖之后才能獲取鎖并訪問共享資源。

以下是使用互斥鎖的基本步驟:

1. 在需要保護的代碼段之前創建一個互斥鎖對象。

2. 線程進入共享資源之前調用互斥鎖的lock()方法。

3. 執行共享資源的代碼。

4. 線程完成共享資源的操作后調用互斥鎖的unlock()方法來釋放鎖。

下面是使用互斥鎖的示例代碼:

#include <iostream>

#include <thread>

#include <mutex>

std::mutex mtx;

void PrintMessage(const std::string& message)

{

    mtx.lock();

    std::cout << message << std::endl;

    mtx.unlock();

}

int main()

{

    std::thread t1(PrintMessage, "Hello");

    std::thread t2(PrintMessage, "World");

    t1.join();

    t2.join();

    return 0;

}

在上述示例中,PrintMessage()函數被兩個線程同時調用,但由于使用了互斥鎖,每次只有一個線程能夠訪問std::cout輸出流。

Critical Section:

臨界區是一段代碼,它需要互斥地執行以避免多個線程同時訪問共享資源。在Windows環境下,可以使用臨界區對象來實現臨界區的同步。

以下是使用臨界區的基本步驟:

1. 在需要保護的代碼段之前創建一個臨界區對象。

2. 線程進入共享資源之前調用臨界區的EnterCriticalSection()函數。

3. 執行共享資源的代碼。

4. 線程完成共享資源的操作后調用臨界區的LeaveCriticalSection()函數來離開臨界區。

下面是使用臨界區的示例代碼:

#include <iostream>

#include <thread>

#include <Windows.h>

CRITICAL_SECTION cs;

void PrintMessage(const std::string& message)

{

    EnterCriticalSection(&cs);

    std::cout << message << std::endl;

    LeaveCriticalSection(&cs);

}

int main()

{

    InitializeCriticalSection(&cs);

    std::thread t1(PrintMessage, "Hello");

    std::thread t2(PrintMessage, "World");

    t1.join();

    t2.join();

    DeleteCriticalSection(&cs);

    return 0;

}

在上述示例中,PrintMessage()函數被兩個線程同時調用,但由于使用了臨界區,每次只有一個線程能夠訪問std::cout輸出流。

無論是使用互斥鎖還是臨界區,都可以確保在多線程環境下共享資源的安全訪問。選擇使用哪種同步機制取決于具體的需求和平臺。

0
晴隆县| 根河市| 那曲县| 云和县| 弋阳县| 南汇区| 姜堰市| 宝山区| 古交市| 共和县| 类乌齐县| 昭平县| 肥城市| 寻乌县| 军事| 邹城市| 凤阳县| 施秉县| 宝鸡市| 建平县| 綦江县| 阳曲县| 富阳市| 青田县| 电白县| 都匀市| 临湘市| 廉江市| 济源市| 尼木县| 新余市| 沭阳县| 黑河市| 交城县| 朝阳市| 宁河县| 水富县| 钟祥市| 三门县| 杂多县| 珠海市|