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

溫馨提示×

VC++處理一個多線程的一個經典問題

小云
91
2023-08-05 23:17:58
欄目: 編程語言

經典的多線程問題之一是生產者-消費者問題。該問題涉及到兩個角色:生產者和消費者,它們共享一個緩沖區。生產者將產品放入緩沖區,消費者從緩沖區取出產品。但是,緩沖區有限,并且在緩沖區已滿或為空時,生產者和消費者必須等待。

下面是一個使用VC++編寫的生產者-消費者問題的簡單示例:

#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::queue<int> buffer;
const int bufferSize = 10;
std::mutex mtx;
std::condition_variable producerCV, consumerCV;
void producer() {
for (int i = 0; i < 20; ++i) {
std::unique_lock<std::mutex> lock(mtx);
producerCV.wait(lock, [] { return buffer.size() < bufferSize; });
buffer.push(i);
std::cout << "Produced: " << i << std::endl;
lock.unlock();
consumerCV.notify_one();
}
}
void consumer() {
for (int i = 0; i < 20; ++i) {
std::unique_lock<std::mutex> lock(mtx);
consumerCV.wait(lock, [] { return !buffer.empty(); });
int value = buffer.front();
buffer.pop();
std::cout << "Consumed: " << value << std::endl;
lock.unlock();
producerCV.notify_one();
}
}
int main() {
std::thread producerThread(producer);
std::thread consumerThread(consumer);
producerThread.join();
consumerThread.join();
return 0;
}

在上述示例中,我們使用一個互斥鎖(std::mutex)來保護共享資源(緩沖區)。std::condition_variable用于在緩沖區滿或為空時,生產者和消費者進行等待和通知。

producer函數模擬生產者的行為:生產產品并將其放入緩沖區。如果緩沖區已滿,生產者線程將等待,直到消費者線程取出一個產品。

consumer函數模擬消費者的行為:從緩沖區取出產品并消費。如果緩沖區為空,消費者線程將等待,直到生產者線程放入一個產品。

main函數中,我們創建了兩個線程分別執行生產者和消費者函數,并等待它們完成。

以上示例是一個簡單的多線程問題的解決方案,但在實際應用中可能需要考慮更多的情況,如線程同步、死鎖避免等。

0
瑞安市| 黄冈市| 荥阳市| 武威市| 肃宁县| 中山市| 姜堰市| 淮安市| 遂川县| 邵阳市| 新建县| 逊克县| 即墨市| 高平市| 犍为县| 巴彦淖尔市| 泰顺县| 新余市| 昭平县| 广元市| 楚雄市| 甘泉县| 彰化市| 通化县| 林西县| 通榆县| 饶河县| 高阳县| 墨江| 仲巴县| 亚东县| 虞城县| 巴彦县| 宜黄县| 林州市| 泰来县| 亚东县| 英山县| 沙湾县| 隆回县| 曲松县|