none
在子线程调用全局变量,引来的问题!!为什么明明是满足了条件啦!就是不执行! RRS feed

  • 问题

  • 语言C++
    //全局变量                 
    bool IsNextData;
    //在子线程调用如下
    while(1)
    {
        if(IsNextData==true)
        {
         
            break;
        }
    }
    为什么IsNextData在满足条件是,不执行break;我以跟踪IsNextData当时是true但是,就是不执行啊!!!!!
    本人分不多,请不要贪图啊!!!!
    杰文
    2009年6月15日 10:59

答案

  • 按照蒋老师的方法是最安全的方法。
    如果想用IsNextData判断
    需要在声明的时候bool前面加volatile
    volatile  bool IsNextData;
    否则编译器会进行优化
    IsNextData直接从寄存器中取值,而不访问内存。
    而你在另一个线程中改变的事IsNextData内存中的值。
    跟踪也是访问内存的值。

    麻烦把正确答案设为解答。
    • 已标记为答案 杰文 2009年6月16日 4:47
    2009年6月16日 4:37
    版主

全部回复

  • InterlockedExchange
    MSMVP VC++
    2009年6月15日 16:51
    版主
  • 按照蒋老师的方法是最安全的方法。
    如果想用IsNextData判断
    需要在声明的时候bool前面加volatile
    volatile  bool IsNextData;
    否则编译器会进行优化
    IsNextData直接从寄存器中取值,而不访问内存。
    而你在另一个线程中改变的事IsNextData内存中的值。
    跟踪也是访问内存的值。

    麻烦把正确答案设为解答。
    • 已标记为答案 杰文 2009年6月16日 4:47
    2009年6月16日 4:37
    版主