由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - C++ volatile请教
相关主题
贴几道老题目小白问题:如何能短时间内提高C++能力?
弱问个C++ 问题 (const_cast)最快的语言还是C/C++吗?
两道面试题,请大家说说看法我觉得任何时候大家讨论的语言就两种,C++和最热的语言。
请教一段volatile和多线程的代码问一道无聊的bloomberg电面题
qualcomm 新鲜电面面经写写某银行面试题目
问道面试体(software)烙印真的很喜欢考multithread的题目
做硬件模拟器的职位有前途吗刚一个interview问的好底层呀。。。
c++ is too nasty今天Amazon的phone interview
相关话题的讨论汇总
话题: volatile话题: 变量话题: c++话题: metex话题: mutex
进入JobHunting版参与讨论
1 (共1页)
b********e
发帖数: 215
1
volatile告诉编译器不要做优化,读和写直接到memory,一些情况下我知道要用
volatile:
int flag = 1;
while(flag == 1)
{
}
如果其他线程可能会改变flag,这里需要是volatile,否则编译器会优化为 while(
true)
但是如果在多线程下一个变量已经被用synchronisation primitive保护了:
lock(mutex)
int tt = 5;
unlock(mutex)
我们还需要把它申明为volatile吗?否则的话,一个线程改变了变量的值,还没有写到
memory,但释放了metex,另一个线程获得metex,access变量,但memory中的变量的值
还是旧的没改变的。简短来说,就是已经被critical section或metex保护的变量在多
线程中还有必要申明为volatile吗?
h****e
发帖数: 928
2
这好象不是volatile的原本用法。它的原本用法是:一些外部进程
会改变该变量的值,要求编译器产生代码的时候不能放在寄存器里,
每次都要重新读一遍,例如当一段IO地址map到一段内存时。

【在 b********e 的大作中提到】
: volatile告诉编译器不要做优化,读和写直接到memory,一些情况下我知道要用
: volatile:
: int flag = 1;
: while(flag == 1)
: {
: }
: 如果其他线程可能会改变flag,这里需要是volatile,否则编译器会优化为 while(
: true)
: 但是如果在多线程下一个变量已经被用synchronisation primitive保护了:
: lock(mutex)

y**********u
发帖数: 6366
3
你错了,他是对的
不是不能放在寄存器里,是不能优化。。。

【在 h****e 的大作中提到】
: 这好象不是volatile的原本用法。它的原本用法是:一些外部进程
: 会改变该变量的值,要求编译器产生代码的时候不能放在寄存器里,
: 每次都要重新读一遍,例如当一段IO地址map到一段内存时。

h****e
发帖数: 928
4
我觉得不能优化就包括不存在寄存器里:
"If you use the volatile modifier on a variable, the compiler
won't cache that variable in registers — each access will hit
the actual memory location of that variable. "
http://www.drdobbs.com/cpp/184403766
回到LZ最初问的问题,“是不是被Mutex之类的保护的变量是不是就不需要
声明volatile了”,我觉得应该是不需要了吧。同样一篇文章说道:
Inside a critical section defined by a mutex, only one thread has
access. Consequently, inside a critical section, the executing code
has single-threaded semantics. The controlled variable is not volatile
anymore — you can remove the volatile qualifier.
1 (共1页)
进入JobHunting版参与讨论
相关主题
今天Amazon的phone interviewqualcomm 新鲜电面面经
数组寻址速度问题?问道面试体(software)
说说下午的面试经历。。。做硬件模拟器的职位有前途吗
一道有趣的面试题。stackexchange上超火 大家说说看法?c++ is too nasty
贴几道老题目小白问题:如何能短时间内提高C++能力?
弱问个C++ 问题 (const_cast)最快的语言还是C/C++吗?
两道面试题,请大家说说看法我觉得任何时候大家讨论的语言就两种,C++和最热的语言。
请教一段volatile和多线程的代码问一道无聊的bloomberg电面题
相关话题的讨论汇总
话题: volatile话题: 变量话题: c++话题: metex话题: mutex