草庐IT

volatile-qualifier

全部标签

c++ - 模板函数中的 volatile 类型推导有什么问题?

我有一个模板函数:templateinlinevoidAcquire_Store(volatileT*ptr,Tvalue){//...}当我尝试像这样调用它时:volatileNode*node;Acquire_Store(&node,static_cast(nullptr));g++和clang++编译器都是这样说的:deducedconflictingtypesforparameter'T'('volatileList::Node*'vs.'List::Node*')调用此模板函数的正确方法是什么?更新。现在我不确定node的类型-也许,我应该将其更改为Node*volatile

c++ - Visual C++ x86 上的 volatile 变量和原子操作

普通加载在x86上具有获取语义,普通存储具有释放语义,但是编译器仍然可以重新排序指令。虽然栅栏和锁定指令(锁定xchg、锁定cmpxchg)防止硬件和编译器重新排序,但仍然需要普通加载和存储来保护编译器屏障。VisualC++提供了_ReadWriterBarrier()函数,它可以防止编译器重新排序,C++也出于同样的原因提供了volatile关键字。我写下所有这些信息只是为了确保我做对了一切。所以上面写的都是真的,是否有任何理由标记为将在受_ReadWriteBarrier()保护的函数中使用的volatile变量?例如:intload(int&var){_ReadWriteBar

c++ - 嵌入式 C++11 代码——我需要 volatile 吗?

带有CortexM3MCU(STM32F1)的嵌入式设备。它有嵌入式闪存(64K)。MCU固件可以在运行时重新编程闪存扇区;这是由闪存Controller(FMC)寄存器完成的(因此它不像a=b那样容易)。FMC获取缓冲区指针并将数据烧录到某个闪存扇区。我想将最后一个闪存扇区用于设备配置参数。参数存储在带有数组的打包结构中,并包含一些自定义类。参数可以在运行时更改(复制到RAM,更改并使用FMC烧回闪存)。所以有一些问题:参数结构的状态(按位)由FMC硬件更改。C++编译器不知道它是否被更改。这是否意味着我应该将所有结构成员声明为volatile?我想是的。Struct应该在编译时静态

带有函数访问的全局共享变量的 C++ volatile 关键字

我有一个多线程C++应用程序。现在我知道对于全局共享变量,在某些情况下您应该在检查变量状态时使用volatile,否则编译器可能会假设变量的值永远不会改变(在该线程中)。但是,如果我没有检查变量的状态,而是调用了一个返回变量值的方法,会怎样呢?例如:staticintnum=0;...voidfoo(){while(getNum()==0){//dosomething(ornothing)}}我还需要将num设置为可变变量吗?或者编译器是否认识到,因为我正在使用一种方法来访问该变量num,所以它不会缓存结果?有人有什么想法吗?提前致谢~朱利安编辑:在我的while循环中,我删除了sle

c++ - 这里需要 volatile 吗?

在Johannes的宝贵回答后编辑并完善了我的问题boolb=true;volatileboolvb=true;voidf1(){}voidf2(){b=false;}void(*volatilepf)()=&f1;//avolatilepointertofunctionintmain(){//differentthreadsstarthere,someofwhichmaychangepfwhile(b&&vb){pf();}}那么,让我们暂时忘记同步。问题是b是否必须声明为volatile。我已经阅读了标准并且知道易变语义的正式定义(我什至几乎理解它们,这个词几乎是关键)。但是,让我

c++ - 从 volatile 变量中获取值的符合 C++03 的方法是什么?

根据这个defectreportC++03标准不保证在以下代码中:volatileintx;voidf(){x;}从中读取变量。那么我该如何编写只读取volatile变量值并丢弃结果的代码(为了读取而读取)? 最佳答案 inti=x;应该可以。此代码绝对需要读取volatile变量,并且不允许优化器优化读取。但是由于变量i未被使用,优化器可以避免存储读取值所涉及的任何额外工作。您可能还需要这样的东西来避免编译器警告:(void)i; 关于c++-从volatile变量中获取值的符合C++

c++ - 为什么可以相对于非 volatile 访问对这种 volatile 访问进行重新排序?

下面的代码示例来自Chineseblog其中引入了volatile的效果。左边是C代码;另一个是生成的汇编代码。//cordering.cgcc-O2-S-masm=intelcordering.cintA;volatileintB;voidfoo()moveax,DWORDPTRB[rip]{movDWORDPTRB[rip],0A=B+1;addeax,1B=0;movDWORDPTRA[rip],eax}ret正如我们在汇编代码中看到的那样,A的副作用位于B的副作用之后,即使B是volatile合格的。然而,cppreference.comsays:[W]ithinasingle

java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No qualifying bean of type [org. springframework.data.hadoop.hive.HiveOperations]

我的应用程序是hadoop和rest服务与spring框架的结合。我的目标是根据要求提供来自配置单元表的结果。但是当我运行应用程序时,在完成mapreduce和hive作业后出现以下错误:java.lang.reflect.InvocationTargetExceptionatsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)atsun.reflect.Delega

java - 没有找到依赖 : expected at least 1 bean which qualifies as autowire candidate for this dependency. 依赖注释:

我正在尝试使用Spring编写一个SOAP服务,但是我收到了一个依赖注入(inject)问题。我在通过服务使用@Autowired时遇到问题,如下所示:publicinterfaceUserDao{UsergetUser(Stringusername);}Dao的实现如下:@Controller("userDao")publicclassUserDaoImplimplementsUserDao{privatestaticLoglog=LogFactory.getLog(UserDaoImpl.class);@Autowired@Qualifier("sessionFactory")pr

java - 没有找到依赖 : expected at least 1 bean which qualifies as autowire candidate for this dependency. 依赖注释:

我正在尝试使用Spring编写一个SOAP服务,但是我收到了一个依赖注入(inject)问题。我在通过服务使用@Autowired时遇到问题,如下所示:publicinterfaceUserDao{UsergetUser(Stringusername);}Dao的实现如下:@Controller("userDao")publicclassUserDaoImplimplementsUserDao{privatestaticLoglog=LogFactory.getLog(UserDaoImpl.class);@Autowired@Qualifier("sessionFactory")pr