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

溫馨提示×

c++多線程共享數據怎么實現

c++
小億
108
2024-01-02 10:25:00
欄目: 編程語言

在C++中,共享數據的多線程實現可以使用互斥鎖(mutex)和條件變量(condition variable)來實現。

互斥鎖用于保護共享數據,確保在任意時刻只有一個線程可以訪問共享數據。當一個線程要訪問共享數據時,它需要先獲取互斥鎖,然后在訪問完共享數據后釋放互斥鎖,以便其他線程可以繼續訪問。

條件變量用于線程之間的同步和通信。一個線程可以通過等待條件變量來等待某個條件成立,而另一個線程可以通過發出信號來通知等待的線程條件已經成立。條件變量通常與互斥鎖一起使用,以保證在等待條件時不會出現競態條件。

下面是一個示例代碼,演示了如何使用互斥鎖和條件變量實現多線程共享數據的方式:

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

std::mutex mtx;  // 互斥鎖
std::condition_variable cv;  // 條件變量
int sharedData = 0;  // 共享數據

void worker(int id) {
  std::unique_lock<std::mutex> lock(mtx);  // 獲取互斥鎖

  // 等待共享數據被更新為指定值
  cv.wait(lock, []{ return sharedData == 42; });

  // 訪問共享數據
  std::cout << "Thread " << id << ": Shared data = " << sharedData << std::endl;

  // 釋放互斥鎖
  lock.unlock();
}

int main() {
  std::thread t1(worker, 1);
  std::thread t2(worker, 2);

  // 更新共享數據
  std::this_thread::sleep_for(std::chrono::seconds(2));  // 模擬一段耗時操作
  {
    std::lock_guard<std::mutex> lock(mtx);  // 獲取互斥鎖

    sharedData = 42;

    // 通知等待的線程條件已經成立
    cv.notify_all();
  }

  t1.join();
  t2.join();

  return 0;
}

在這個示例中,有兩個線程(t1t2)等待共享數據被更新為指定值(42)。主線程在等待一段時間后更新共享數據,并通知等待的線程條件已經成立。等待的線程被喚醒后會再次獲取互斥鎖并訪問共享數據。

需要注意的是,互斥鎖和條件變量的使用必須是配對的,即在等待條件時必須使用相同的互斥鎖。另外,使用互斥鎖和條件變量時要避免死鎖和競態條件的發生,需要仔細設計和調整線程的執行順序和操作。

0
廉江市| 万宁市| 八宿县| 星子县| 长岭县| 广州市| 汪清县| 房产| 上蔡县| 天台县| 呈贡县| 凭祥市| 柏乡县| 武冈市| 苗栗县| 辽源市| 马尔康县| 芜湖县| 湖州市| 邵东县| 祁东县| 翁源县| 郓城县| 阳新县| 大田县| 承德市| 库伦旗| 耿马| 吉隆县| 万盛区| 呈贡县| 桦甸市| 徐水县| 谢通门县| 都兰县| 荆门市| 拜城县| 梁山县| 民和| 南溪县| 东至县|