C++中stdin在多线程环境下的使用

avatar
作者
筋斗云
阅读量:0

在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),因为一个线程可能会长时间等待获取互斥锁。为了避免这种情况,可以使用条件变量或其他同步原语来实现更复杂的线程调度策略。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!