c ++在线程之间共享状态的最佳方式

Oz *_* Le 4 c++ multithreading mutex atomic c++11

方案如下:线程A继续执行,直到它从线程B收到一个停止从控制台读取输入的停止信号.

实现这个的最佳方法是什么?例如,我想我可以将它实现为一个全局变量,线程A每隔一段时间就会检查一次,而线程B可以改为发出"停止"信号,

但我不知道这是不是正确的方法.

  • 即使它是正确的,我应该使用"Volatile"还是"Atomic <>"?特别是线程A只读取变量的值,而线程B只写入变量.

  • 如果在线程A读取它之后立即从线程B修改变量并不重要(不会引起问题"线程A退出时间有些放松(在信号之后容忍)")?

  • 是否还有另一种方法让线程B启动线程A并在需要时停止它?

Iva*_*rop 5

这个问题可能会被关闭为"过于宽泛",但我会尝试回答它(以相同的"广泛"方式).

这里唯一可以想象的答案是: "它取决于"(c)

一般建议: 尝试,并保持简单(KISS原则).从一个简单的解决方案开始(比如你的情况下的互斥),如果你发现它不能令人满意,可以用另一个更复杂但更有效/可扩展/可定制/令人愉快的东西(让我们说原子)来代替它.如果任何一个证明是不够的,那么进一步增加复杂性(放松原子,添加无锁的东西,建立基于任务的并发,无论你需要什么),直到找到合适的平衡.