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

溫馨提示×

C++中stdin在多線程環境下的使用

c++
小樊
87
2024-09-10 17:28:19
欄目: 編程語言

在C++中,stdin是一個全局變量,用于從標準輸入(通常是鍵盤)讀取數據

然而,在實際應用中,我們可以使用互斥鎖(mutex)來確保在任何時候只有一個線程能夠訪問stdin。這樣可以避免數據競爭和不一致的問題。

以下是一個簡單的示例,展示了如何在多線程環境下使用stdin

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

std::mutex mtx; // 用于保護stdin的互斥鎖

void read_input(int thread_id) {
    std::unique_lock<std::mutex> lock(mtx); // 獲取互斥鎖
    std::cout << "Thread "<< thread_id << " is reading from stdin: ";
    int input;
    std::cin >> input;
    std::cout << "Thread "<< thread_id << " read: "<< input<< std::endl;
    lock.unlock(); // 釋放互斥鎖
}

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

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

    return 0;
}

在這個示例中,我們創建了兩個線程,它們都會調用read_input函數。read_input函數首先獲取互斥鎖,然后從stdin讀取一個整數,并將其打印到控制臺。當線程完成輸入操作后,它會釋放互斥鎖,允許其他線程訪問stdin

需要注意的是,這種方法可能會導致線程饑餓(starvation),因為一個線程可能會長時間等待獲取互斥鎖。為了避免這種情況,可以使用條件變量或其他同步原語來實現更復雜的線程調度策略。

0
铜川市| 宜川县| 新巴尔虎左旗| 洪雅县| 巴塘县| 凤冈县| 佛冈县| 莱阳市| 南投县| 淮滨县| 吐鲁番市| 阳朔县| 宣武区| 越西县| 宁武县| 邢台市| 铁力市| 余庆县| 萨迦县| 于田县| 乌苏市| 静乐县| 临潭县| 津南区| 福海县| 石渠县| 德兴市| 平邑县| 乌拉特中旗| 汪清县| 富源县| 安丘市| 辉县市| 丰镇市| 水城县| 如东县| 格尔木市| 全椒县| 平乡县| 鹤峰县| 峨边|