volatile

c – 这个模式的目的是使用一个易于指向“this”的volatile指针?

我最近在C多线程代码中碰巧使用volatile关键字.为了抽象编程模式,我们假设有一个控制对象被一个生产者和几个消费者线程访问:消费者线程执行以下操作:这里的想法是,消费者线程将等待直到有一些工作要做,生产者通过wake_cond变量发出信号.这里我不明白的是为什么控件对象是通过一个易于使用的方法vthis()返回的“this”的volatile指针来访问的.这是为什么?

c – 为什么和什么时候被转换为char volatile和需要?

在boost::detail::addressof_impl::f()年,一系列的reinterpret_cast完成以获得对象的实际地址,以防类别T超载运算符&():对于constvolatilechar&而不是只是铸造char&解决方法直奔焦炭如果T有const或volatile限定符,则会失败–reinterpret_cast不能删除这些(但可以添加它们),const_cast不能进行任意类

c – 互斥体的存在有助于摆脱挥发性关键词吗?

我有一个多R/W锁类,可以保持读,写和待处理读取等待写入计数器.互斥体从多个线程中保护它们.我的问题是,我们仍然需要将这些计数器声明为volatile,以便编译器在进行优化时不会使其松动.或者编译器考虑到计数器被互斥体保护.我明白互斥是用于同步的运行时机制,“volatile”关键字是一个编译时指示,编译器在进行优化时做正确的操作.问候,-Jay.解决方法这里有两个基本上无关的项目,总是困惑.>挥

c – 为什么摆脱挥发性是危险的?

在C中,volatile的处理方式与const相同:将指向volatile数据的指针传递给不希望volatile修饰符触发编译错误的函数.为什么危险?对于const修饰符来说很明显,删除它会破坏const的正确性;但是有没有“不稳定的正确性”这样的东西?

c – for循环被忽略(优化?)输出

我使用for/while循环来实现代码中的延迟.延迟的持续时间在这里并不重要,尽管它足够大而值得注意.这是代码片段.我观察到的问题是这个for循环不会被执行.它可能会被编译器忽略/优化.但是,如果我通过volatile限定循环计数器i,则for循环似乎执行,我确实注意到执行中所需的延迟.对于使用/不使用volatile关键字的编译器优化的理解,这种行为似乎有点违反直觉.即使循环计数器得到优化并存储

c – while(!volatile);做?

我在一个从未在同事的代码中调用过的部分中看到了这个:vol_flag在头文件中声明,但永远不会更改.我是否正确,这会导致程序无限循环?

什么时候可以完全优化易失性变量?

考虑以下代码示例:如果没有volatile,编译器可以优化掉所有变量,因为它们永远不会被读取.我认为a和b可以被优化掉,因为它们完全没用,见unusedvolatilevariable.我认为c和d无法被删除,因为它们被写入,并且写入volatile变量必须实际发生.e应该相当于c.GCC不会优化f,但它也不会发出任何写入指令.在数据部分中设置50.LLVM(clang)完全删除f.这些陈述是真的