class Gadget
{
public:
void Wait()
{
while (!flag_)
{
Sleep(1000); // sleeps for 1000 milliseconds
}
}
void Wakeup()
{
flag_ = true;
}
...
private:
bool flag_;
};
这个程序就是百度上复制来的 说是错误的 要把“bool flag_;”改为“volatile bool flag_;”好像如果是多线程 才会出现这样的问题 但是这个代码也反应不出来多线程啊 是不是用Wakeup去改flag_的时候 while循环也在执行 这样就是多线程了吗 我接触线程还比较少 所以请大家指点迷津 帮我详细说说
{
public:
void Wait()
{
while (!flag_)
{
Sleep(1000); // sleeps for 1000 milliseconds
}
}
void Wakeup()
{
flag_ = true;
}
...
private:
bool flag_;
};
这个程序就是百度上复制来的 说是错误的 要把“bool flag_;”改为“volatile bool flag_;”好像如果是多线程 才会出现这样的问题 但是这个代码也反应不出来多线程啊 是不是用Wakeup去改flag_的时候 while循环也在执行 这样就是多线程了吗 我接触线程还比较少 所以请大家指点迷津 帮我详细说说
解决方案 »
- windows下的select()函数是只能处理socket句柄呢还是其他类型句柄也能处理?
- 【散分】周末愉快!
- 二值图和24位色位图是什么关系啊?
- MFC对话框的隐藏
- 怎么在access数据库中,把表名字满足某个特定条件的表挑出来
- 我用MFC开发了一个ActiveX控件,如何实现控件的ToolTip,谢谢了!
- 如何为系统托盘内的图标弹出的菜单编写代码?
- 急求关于 netmeeting 开发的小程序源码! 网上下的例子看不懂 急用!!!! 500分求一个程序
- 一个古老而神秘的问题,请各位高手进门指教(菜货千万不要进!会吓到你们的!)
- 怎样在程序中检测特殊键,如ESC键,被按下?
- 关于CreateToolhelp32Snapshot的问题?
- UINT 不是无符号整数类型吗?怎么它能保存负数的?
如果这样的情况呢
就是比如程序开始就开始反复处理一个数字 比如不停的++ , 然后弄个计时器 固定时候发消息 而处理消息的程序就是显示这个数字现在的值 那么这个数字变量 在定义的时候需要加上这个volatile这个变量吗?
处理消息的线程 和 对这个数字变量不停++的线程是一个线程吗?谢谢指教啊
请问LS的大侠 当一个函数处理一个数据的时候 如果没有处理完 也没有返回 那么在让出处理器的时候 数字没有保存在内存中吗 而是保存在某个寄存器中 那么正巧有另外一个函数取得处理器 开始读取这个数 读的是内存中的 而不是寄存器中的 然后就不能保持同步了 是这样吗那么万一这不是一个数字 而是一群数字 有那么多寄存器去保存吗?
volatile 保证编译器不对该对象进行优化,每次需要它的值时都重新读取。
意思就是说当没有volatile标识的对象,在编译器编译时,如果编译器觉得可以用一个常量来
代替这个对象的值的话,编译器会把没有volatile标识的对象转换成一个常量来进行优化!泛型<编程>:volatile——多线程程序员最好的朋友volatile 修正符及让你的编译器为你检查
竞态条件(race conditions)