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

   2024-09-30 2720
核心提示:在C++中,stdin是一个全局变量,用于从标准输入(通常是键盘)读取数据然而,在实际应用中,我们可以使用互斥锁(mutex)来确保

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

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号