所以我正在为USB HID设备设计一个新的软件界面,我有一个关于并发保护的问题。我假设我必须在调用ReadFile和WriteFile时添加并发保护(如果错误,请纠正我),因为这些可以在我的设计中从不同的线程调用。
在过去,我有时使用静态布尔来实现线程安全,添加一个等待1ms的循环,直到bool指示代码可以安全进入。我也使用过CriticalSections。任何人都可以告诉我,CriticalSections是否从根本上比使用静态bool更好。我知道我不需要编写一个等待循环的代码,但他们在VC ++中使用什么轮询速率来检查锁的状态?他们是否以某种方式吸引操作系统,使他们变得更好?使用bool进行并发检查并不总是安全吗?等
答案 0 :(得分:1)
我对C ++知之甚少,但并发通常并非通过轮询实现,并且通常不应该轮询浪费处理器时间并浪费能源。
是两种主要的低级方法阻止锁定,可能是超时。
使用无锁原语,很可能是比较和设置或比较和交换。
这些方法都受到典型现代硬件的支持。它们导致了非常不同的“交互风味”。编写无锁数据结构最好留给专家(它们往往很复杂,而且更重要的是,往往很难看出它们是否正确以及它们是否保证在争用面前取得进展 - 它们的描述通常是附有证明页面)。幸运的是,你可以获得它们的库,并且它们比在很多但不是所有情况下阻塞它们更快更好。
答案 1 :(得分:0)
好吧没关系。我只是坚持关键部分。我希望得到一些有关关键部分如何工作的有趣信息,或至少提到有关该文章的文章。 IE - 为什么它们不仅仅是编写自己的轮询循环。我从这个讨论中看到:std::mutex performance compared to win32 CRITICAL_SECTION关于std :: mutex如何工作存在一些混淆,但我认为最好使用CRITICAL_SECTIONS,因为它似乎是最可靠的方法来获得Windows上最快的并发保护。
非常感谢。