c++的process同步機(jī)制

c++
小樊
84
2024-08-17 19:02:40

在C++中,可以使用互斥鎖(mutex)、條件變量(condition variable)和信號(hào)量(semaphore)等同步機(jī)制來(lái)實(shí)現(xiàn)進(jìn)程之間的同步。

  1. 互斥鎖(mutex):互斥鎖用于保護(hù)臨界區(qū)(critical section),確保在同一時(shí)刻只有一個(gè)線程可以訪問(wèn)共享資源??梢允褂胹td::mutex類來(lái)創(chuàng)建和管理互斥鎖。
#include <mutex>

std::mutex mtx;

void func() {
    std::lock_guard<std::mutex> lock(mtx); // 加鎖
    // 訪問(wèn)共享資源
} // 解鎖
  1. 條件變量(condition variable):條件變量用于線程之間的通信,當(dāng)某個(gè)條件滿足時(shí),喚醒等待在條件變量上的線程??梢允褂胹td::condition_variable類來(lái)創(chuàng)建和管理?xiàng)l件變量。
#include <condition_variable>

std::condition_variable cv;

void func() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock); // 等待條件變量
}

void another_func() {
    cv.notify_one(); // 喚醒一個(gè)等待在條件變量上的線程
}
  1. 信號(hào)量(semaphore):信號(hào)量用于控制多個(gè)進(jìn)程對(duì)共享資源的訪問(wèn)。可以使用std::semaphore類來(lái)創(chuàng)建和管理信號(hào)量。
#include <semaphore>

std::semaphore sem(1); // 初始值為1

void func() {
    sem.acquire(); // P操作
    // 訪問(wèn)共享資源
    sem.release(); // V操作
}

以上是常用的C++同步機(jī)制,可以根據(jù)具體需求選擇合適的機(jī)制來(lái)實(shí)現(xiàn)進(jìn)程之間的同步。

0