中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
巴林右旗| 五峰| 庆云县| 探索| 鹿邑县| 鄂伦春自治旗| 延川县| 内江市| 调兵山市| 绥芬河市| 珠海市| 集贤县| 阳谷县| 洛川县| 浦东新区| 新民市| 商丘市| 高台县| 息烽县| 子长县| 杭州市| 沂源县| 宜君县| 盐源县| 娄烦县| 抚松县| 格尔木市| 安国市| 恭城| 金山区| 三都| 堆龙德庆县| 门头沟区| 卓尼县| 叙永县| 郸城县| 博湖县| 通江县| 铜山县| 博客| 昂仁县|