用循环开启了多个线程。
其中都要修改某个全局变量。但是,发现如果只有1个线程就可以修改。
如果同时有多个多个线程就不行,变量值不变。请问该怎么办?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1151/1151922.xml?temp=.7284967
    也许会有启发
      

  2.   

    int g_yourvar//全局变量
    CRITICAL_SECTION cs_for_yourvar//用于同步控制的临界区;InitializeCriticalSection(&cs_for_yourvar);//初始化临界区在每个线程中访问全局变量的地方加上这两句
    EnterCriticalSection(&cs_for_yourvar);
    //这里访问全局变量
    LeaveCriticalSection(&cs_for_yourvar);
      

  3.   

    多谢aben456(风轻扬),nustbobo(pipi)的方法没试,不知有什么区别。
        
        信号量主要应用于在同一时刻只能有一个对象来访问的资源,就象一个灯一样,灯亮了就可以通过,否则代表有人正在使用中,必须灯这个人使用完毕下一个人才可以使用。信号量只是解决类似问题的其中之一的方法哦,相关资料可以使用google搜索:多线程同步HANDLE hMutex;//申明一个信号量hMutex = CreateMutex( NULL, FALSE, NULL );//初始化
    //使用
    WaitForSingleObject(hMutex, 10000);//等待信号有效时才继续
    //do your database opration here
    try
    {
    rs.Open(CRecordset::snapshot, str_sql);
             }......
    ReleaseMutex(hMutex);//释放,让别人可以使用一定要记住,出异常时也要调用ReleaseMutex(hMutex)来释放;根据需要你可以建立多个信号量对多个共享资源进行管理。
      

  4.   

    临界区和信号量差不多啦,就象坐火车的时候上厕所:)
    进去的时候把门关上,其他人进步来,出来的时候再把门打开
    其他人就可以用了
    具体来讲,全局变量是那个马桶,临界区就是那个门:)
    sorry,太不雅了:)