我有几个volatile问题C++:
volatile有一种观点认为,在不同线程中使用共享对象(ala,一个链表,其所有方法都受内部互斥体保护)时不需要创建。问题 - 为什么?如果volatile需要向编译器解释一个值可以以意想不到的方式改变并且不需要优化,那么为什么同步访问自身的链表在从不同线程使用并且没有说明符时可以正常工作volatile?- 用说明符标记的方法的语义是
volatile什么? - 什么时候应该使用说明符
volatile?具有由从另一个线程更改的标志控制的循环的示例过于简单,并且C++在考虑实际场景时无法提供任何清晰性。
因为同步原语本身(互斥体)是“障碍”。这个话题很广泛,不能用一个答案来涵盖。但是您可以从这里开始阅读http://scrutator.me/post/2012/04/04/parallel-world-p1.aspx和 Anthony William - 书籍“Parallel C++ Programming in Action. Multithreaded Program Development Practice”
但简单来说,如果一个然后修改不同的变量并释放互斥锁,另一个捕获相同的互斥锁并尝试读取相同的变量,那么它们的状态将是“预期的”。并且没有捕获互斥锁 - 不是事实。
好吧,C++ 中没有方法。有一个类成员函数,或者只是一个函数。语义与 const 相同 - 你的 this 将是易变的。
开发驱动程序和微控制器时应使用 volatile。volatile 的底层本质揭示了这样一个例子
如果没有 volatile,编译器将简单地丢弃第一个赋值。这是没有意义的。使用易失性,写入将完成两次。做什么的?并且变量 a 可以与某个外部设备相关联,写入该变量将写入某个 I/O 端口。优化只会阻碍。