使用AfxBeginThread创建一个线程,在线程中每1秒更新一次全局变量h的值,除了这个线程以外没有其他的地方直接对h进行赋值
在其他线程和主程序中读取h的值,读到的h值有没有可能会是一个错误的值?
[比如线程把h修改为70/80,而其他地方把h读出来的时候却成了0/123?]

解决方案 »

  1.   

    最好这样搞。        CRITICAL_SECTION cs;
     
             InitializeCriticalSection(&cs);
     
            EnterCriticalSection (&cs);
        离开临界区:
            LeaveCriticalSection(&cs);
      

  2.   

    线程修改h数据的那小段时间内读取h的话就会出错了吗?如果把线程改成下面这样,而其他线程读取h的地方不做修改,就用最简单的方法直接读取h,可以避免异常吗?
    CRITICAL_SECTION g_cs;//临界区
    int h;
    ThreadFun()
    {
    EnterCriticalSection(&g_cs);
    h = ...;//修改全局变量h的值
    LeaveCriticalSection(&g_cs);
    }