草庐IT

non-volatile

全部标签

c++ - volatile 成员函数的性能后果

我找到了一篇关于Dobbs博士的2001年文章:volatile-MultithreadedProgrammer'sBestFriend.我总是发现'volatile'有点没用-至少作为变量的限定符-因为访问线程之间共享的变量总是要通过某种库层。尽管如此,将类实例和方法标记为“volatile”以表明它们在文章中介绍的线程安全程度似乎非常引人注目。为了快速总结这篇文章,核心思想是可以这样声明一个类:structSomeObject{voidSingleThreadedMethod();voidMethod();voidMethod()volatile;};然后,类的实例,如下所示://

c++ - volatile 成员函数的性能后果

我找到了一篇关于Dobbs博士的2001年文章:volatile-MultithreadedProgrammer'sBestFriend.我总是发现'volatile'有点没用-至少作为变量的限定符-因为访问线程之间共享的变量总是要通过某种库层。尽管如此,将类实例和方法标记为“volatile”以表明它们在文章中介绍的线程安全程度似乎非常引人注目。为了快速总结这篇文章,核心思想是可以这样声明一个类:structSomeObject{voidSingleThreadedMethod();voidMethod();voidMethod()volatile;};然后,类的实例,如下所示://

c++ - 通过访问函数访问共享内存是否需要 `volatile`?

[edit]对于背景阅读,要清楚,这就是我所说的:Introductiontothevolatilekeyword在查看嵌入式系统代码时,我看到的最常见错误之一是线程/中断共享数据的volatile遗漏。但是我的问题是,当通过访问函数或成员函数访问变量时,不使用volatile是否“安全”?一个简单的例子;在下面的代码中...volatileboolflag=false;voidThreadA(){...while(!flag){//Wait}...}interruptvoidInterruptB(){flag=true;}...变量flag必须是volatile以确保不会优化Thre

c++ - 通过访问函数访问共享内存是否需要 `volatile`?

[edit]对于背景阅读,要清楚,这就是我所说的:Introductiontothevolatilekeyword在查看嵌入式系统代码时,我看到的最常见错误之一是线程/中断共享数据的volatile遗漏。但是我的问题是,当通过访问函数或成员函数访问变量时,不使用volatile是否“安全”?一个简单的例子;在下面的代码中...volatileboolflag=false;voidThreadA(){...while(!flag){//Wait}...}interruptvoidInterruptB(){flag=true;}...变量flag必须是volatile以确保不会优化Thre

c++ - 标准 C++11 是否保证 `volatile atomic<T>` 具有两种语义( volatile + 原子)?

众所周知,std::atomic和volatile是不同的东西。有两个主要区别:两个优化可以用于std::atomica;,但不能用于volatileinta;:融合操作:a=1;a=2;可以由a=2;上的编译器替换不断传播:a=1;local=a;可以由a=1;local=1;上的编译器替换跨原子/volatile操作的普通读/写重新排序:为volatileinta;任何volatile读/写操作都不能重新排序。但是附近的普通读/写仍然可以围绕volatile读/写重新排序。为std::atomica;基于用于原子操作的内存屏障限制附近普通读/写的重新排序a.load(std::me

c++ - 标准 C++11 是否保证 `volatile atomic<T>` 具有两种语义( volatile + 原子)?

众所周知,std::atomic和volatile是不同的东西。有两个主要区别:两个优化可以用于std::atomica;,但不能用于volatileinta;:融合操作:a=1;a=2;可以由a=2;上的编译器替换不断传播:a=1;local=a;可以由a=1;local=1;上的编译器替换跨原子/volatile操作的普通读/写重新排序:为volatileinta;任何volatile读/写操作都不能重新排序。但是附近的普通读/写仍然可以围绕volatile读/写重新排序。为std::atomica;基于用于原子操作的内存屏障限制附近普通读/写的重新排序a.load(std::me

c++ - 为什么 const/non-const 函数重载的继承不明确?

我试图创建两个类,第一个类是函数的非const实现,第二个类是const实现。这是一个小例子:classBase{protected:intsome;};classA:publicvirtualBase{constint&get()const{returnsome;}};classB:publicvirtualBase{int&get(){returnsome;}};classC:publicA,B{};Ctest;test.get();//ambiguous对get函数的调用不明确。不管const版本需要匹配更多的需求。(在constC上调用get也是模棱两可的,但有一个可能的函数可

c++ - 为什么 const/non-const 函数重载的继承不明确?

我试图创建两个类,第一个类是函数的非const实现,第二个类是const实现。这是一个小例子:classBase{protected:intsome;};classA:publicvirtualBase{constint&get()const{returnsome;}};classB:publicvirtualBase{int&get(){returnsome;}};classC:publicA,B{};Ctest;test.get();//ambiguous对get函数的调用不明确。不管const版本需要匹配更多的需求。(在constC上调用get也是模棱两可的,但有一个可能的函数可

c++ - 如何使用 std::is_volatile?

我试图禁止对volatile类型的特定操作。为此,我尝试使用std::is_volatile,但下面的代码编译时没有错误,这不是我想要的。为什么is_volatile::valuefalse在下面的情况下?#includetemplateinlinevoidDoStuff(Tval){static_assert(!std::is_volatile::value,"Novolatiletypesplz");//...}intmain(){volatilecharsometext[261];DoStuff(sometext);} 最佳答案

c++ - 如何使用 std::is_volatile?

我试图禁止对volatile类型的特定操作。为此,我尝试使用std::is_volatile,但下面的代码编译时没有错误,这不是我想要的。为什么is_volatile::valuefalse在下面的情况下?#includetemplateinlinevoidDoStuff(Tval){static_assert(!std::is_volatile::value,"Novolatiletypesplz");//...}intmain(){volatilecharsometext[261];DoStuff(sometext);} 最佳答案