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

溫馨提示×

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
阿瓦提县| 舞阳县| 温州市| 晋城| 黑龙江省| 贵溪市| 揭西县| 咸宁市| 宜城市| 禹州市| 莲花县| 翁牛特旗| 商城县| 淮南市| 包头市| 景东| 连州市| 赣榆县| 深水埗区| 合作市| 绥江县| 佳木斯市| 楚雄市| 苍山县| 延庆县| 万年县| 瓮安县| 务川| 建平县| 磐石市| 杭锦旗| 乐平市| 舞钢市| 庆云县| 霍山县| 内丘县| 保德县| 沙坪坝区| 萨嘎县| 林周县| 都江堰市|