溫馨提示×

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

c++
小樊
97
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女