在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),因為一個線程可能會長時間等待獲取互斥鎖。為了避免這種情況,可以使用條件變量或其他同步原語來實現更復雜的線程調度策略。