c++ - scanf(), std::cin 在多线程环境下如何表现?

标签 c++ multithreading concurrency

我想用一个例子来说明我的问题。

假设有一组 N/*(N>>1)*/ 线程被设置为运行这个函数:

void Process() {
    //Some thread safe processing which requires in-deterministic computation time

    unsigned char byte;
    std::cin >> byte;
}

一旦所有这些都同时启动,会发生什么?如何处理并发 std::cin 访问?在控制台上操作的最终用户会看到/体验到什么?

编辑:我还想补充一件事。下面的代码是否足够安全,可以放弃仅在一个(可能是主线程)线程中使用 std:cin 的想法?

void Process() {
    //Some thread safe processing which requires in-deterministic computation time

    //Mutex lock
    unsigned char byte;
    std::cin >> byte;
    //Mutex unlock
}

最佳答案

我想说,如果没有互斥锁,结果是不可预测的。

如果你使用互斥锁,一切都很好。这就是互斥锁的用途。

关于c++ - scanf(), std::cin 在多线程环境下如何表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844239/

相关文章:

python - 我如何在 Django 中使用 uWSGI 后台处理程序?

c++ - 如何在 boost::program_options 中接受空值

java - ThreadPoolExecutor 在低负载时不收缩

c++ - pthread c++ 的性能提升可忽略不计

java - 任务完成后如何在java中销毁线程

java - JProgressBar setValue 不起作用,也尝试使用 SwingUtilities

c++ - 具有双向接口(interface)的基于 DLL 的应用程序框架 (Windows)

c++ - boost asio 绑定(bind) : bad file descriptor

c++ - emplace 和 unordered_map<?, std::array<?, N>>

c++ - std::packaged_task 编译错误 w/gcc 4.6