草庐IT

volatile

全部标签

c++ - "pseudo-atomic"C++ 操作

所以我知道在C++中没有什么是原子的。但我试图弄清楚是否有任何我可以做出的“伪原子”假设。原因是我想避免在一些我只需要非常弱的保证的简单情况下使用互斥锁。1)假设我已经全局定义了volatileboolb,它最初我设置为true。然后我启动一个执行循环的线程while(b)doSomething();同时,在另一个线程中,我执行b=true。我可以假设第一个线程会继续执行吗?换句话说,如果b开始时为真,并且第一个线程在第二个线程分配b=true的同时检查b的值,我是否可以假设第一个线程将b的值读取为真?或者是否有可能在赋值b=true的某个中间点,b的值可能被读取为false?2)现在

c++ - "pseudo-atomic"C++ 操作

所以我知道在C++中没有什么是原子的。但我试图弄清楚是否有任何我可以做出的“伪原子”假设。原因是我想避免在一些我只需要非常弱的保证的简单情况下使用互斥锁。1)假设我已经全局定义了volatileboolb,它最初我设置为true。然后我启动一个执行循环的线程while(b)doSomething();同时,在另一个线程中,我执行b=true。我可以假设第一个线程会继续执行吗?换句话说,如果b开始时为真,并且第一个线程在第二个线程分配b=true的同时检查b的值,我是否可以假设第一个线程将b的值读取为真?或者是否有可能在赋值b=true的某个中间点,b的值可能被读取为false?2)现在

c++ - C/C++ : casting away volatile considered harmful?

(与此问题IsItSafetoCastAwayvolatile?相关,但不完全相同,因为该问题与特定实例有关)是否有过抛弃volatile被不视为危险做法的情况?(一个特别的例子:如果声明了一个函数voidfoo(long*pl);我必须实现voidbar(volatilelong*pl);由于我的部分实现需要bar()调用foo(pl),那么我似乎无法让它按原样工作,因为编译foo()和编译bar()的调用者不兼容。)作为推论,如果我有一个volatile变量v,并且我想用别人的函数voidfoo(long*pl),那个人告诉我它是安全的,我可以在调用之前直接转换指针,我的直觉是告诉

c++ - C/C++ : casting away volatile considered harmful?

(与此问题IsItSafetoCastAwayvolatile?相关,但不完全相同,因为该问题与特定实例有关)是否有过抛弃volatile被不视为危险做法的情况?(一个特别的例子:如果声明了一个函数voidfoo(long*pl);我必须实现voidbar(volatilelong*pl);由于我的部分实现需要bar()调用foo(pl),那么我似乎无法让它按原样工作,因为编译foo()和编译bar()的调用者不兼容。)作为推论,如果我有一个volatile变量v,并且我想用别人的函数voidfoo(long*pl),那个人告诉我它是安全的,我可以在调用之前直接转换指针,我的直觉是告诉

c++ - 编译器在处理 volatile 内存位置时必须遵循哪些规则?

我知道当从多个线程或进程写入的内存位置读取时,volatile关键字应该用于该位置,如下面的某些情况,但我想了解更多有关哪些限制的信息它真的对编译器有用吗?基本上编译器在处理这种情况时必须遵循什么规则,是否存在任何异常(exception)情况,尽管同时访问内存位置,但程序员可以忽略volatile关键字。volatileSomeType*ptr=someAddress;voidsomeFunc(volatileconstSomeType&input){//functionbody} 最佳答案 你知道的都是假的。Volatile不用

c++ - 编译器在处理 volatile 内存位置时必须遵循哪些规则?

我知道当从多个线程或进程写入的内存位置读取时,volatile关键字应该用于该位置,如下面的某些情况,但我想了解更多有关哪些限制的信息它真的对编译器有用吗?基本上编译器在处理这种情况时必须遵循什么规则,是否存在任何异常(exception)情况,尽管同时访问内存位置,但程序员可以忽略volatile关键字。volatileSomeType*ptr=someAddress;voidsomeFunc(volatileconstSomeType&input){//functionbody} 最佳答案 你知道的都是假的。Volatile不用

c++ - 间接运算符的 C++ 标准描述是否保证不会优化内存写入?

这基本上是thisquestion的延续.到目前为止,如果我有这样的功能,它看起来像这样:voidSecureZeroMemory(void*ptr,size_tcnt){volatilechar*vptr=(volatilechar*)ptr;while(cnt){*vptr=0;vptr++;cnt--;}}然后这样调用它:{charbuffer[size];SecureZeroMemory(buffer,size);}那么由于buffer没有声明为volatile,所以使用指向volatile的指针并不重要——数据本身不是volatile,因此写入变量不构成可观察行为(1.9/6

c++ - 间接运算符的 C++ 标准描述是否保证不会优化内存写入?

这基本上是thisquestion的延续.到目前为止,如果我有这样的功能,它看起来像这样:voidSecureZeroMemory(void*ptr,size_tcnt){volatilechar*vptr=(volatilechar*)ptr;while(cnt){*vptr=0;vptr++;cnt--;}}然后这样调用它:{charbuffer[size];SecureZeroMemory(buffer,size);}那么由于buffer没有声明为volatile,所以使用指向volatile的指针并不重要——数据本身不是volatile,因此写入变量不构成可观察行为(1.9/6

c++ - C++11 是否允许(不需要)释放/获取 volatile 关键字的语义

自VisualC++2005起,Microsoft对C++标准不要求的volatile类型的访问做出了额外的排序保证。C++标准中是否确实禁止了这些保证?TheMicrosoftdocumentation好像是这么想的。请让我知道标准是否允许微软实现的排序,并对这个错误报告进行投票:/volatile:msdocumentationmangleswhat"ISOcompliant"means 最佳答案 只要满足标准规定的要求,实现当然可以做超出要求的事情。向volatile对象添加释放/获取语义肯定在范围内。我认为C++委员会没有兴

c++ - C++11 是否允许(不需要)释放/获取 volatile 关键字的语义

自VisualC++2005起,Microsoft对C++标准不要求的volatile类型的访问做出了额外的排序保证。C++标准中是否确实禁止了这些保证?TheMicrosoftdocumentation好像是这么想的。请让我知道标准是否允许微软实现的排序,并对这个错误报告进行投票:/volatile:msdocumentationmangleswhat"ISOcompliant"means 最佳答案 只要满足标准规定的要求,实现当然可以做超出要求的事情。向volatile对象添加释放/获取语义肯定在范围内。我认为C++委员会没有兴