多个线程中能修改全局变量吗? 用循环开启了多个线程。其中都要修改某个全局变量。但是,发现如果只有1个线程就可以修改。如果同时有多个多个线程就不行,变量值不变。请问该怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://expert.csdn.net/Expert/topic/1151/1151922.xml?temp=.7284967也许会有启发 int g_yourvar//全局变量CRITICAL_SECTION cs_for_yourvar//用于同步控制的临界区;InitializeCriticalSection(&cs_for_yourvar);//初始化临界区在每个线程中访问全局变量的地方加上这两句EnterCriticalSection(&cs_for_yourvar);//这里访问全局变量LeaveCriticalSection(&cs_for_yourvar); 多谢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)来释放;根据需要你可以建立多个信号量对多个共享资源进行管理。 临界区和信号量差不多啦,就象坐火车的时候上厕所:)进去的时候把门关上,其他人进步来,出来的时候再把门打开其他人就可以用了具体来讲,全局变量是那个马桶,临界区就是那个门:)sorry,太不雅了:) 局域网内多个文件和文件夹的传送 vs 2003 中的项目在 vs2005中出现以下错误,怎么回事,谢谢... 关于_i64toa的一个问题 怎么样利用VC去读取一个分区的存在不存在? ATL编写的一个服务,怎么能捕捉系统事件呢 VC怎么求当前程序的全路径 如何监视弹出菜单“消失”的事件? 如何直接打开网络上的一个文件,而不在本地生成一个临时文件? 急 在线 等 ,string 类型的日期时间如何相减? CFormView中的CEdit控件 请问如何改变CRichEidtCtrl的颜色?? 深入消息运用与处理(有兴趣请入内坐坐)
也许会有启发
CRITICAL_SECTION cs_for_yourvar//用于同步控制的临界区;InitializeCriticalSection(&cs_for_yourvar);//初始化临界区在每个线程中访问全局变量的地方加上这两句
EnterCriticalSection(&cs_for_yourvar);
//这里访问全局变量
LeaveCriticalSection(&cs_for_yourvar);
信号量主要应用于在同一时刻只能有一个对象来访问的资源,就象一个灯一样,灯亮了就可以通过,否则代表有人正在使用中,必须灯这个人使用完毕下一个人才可以使用。信号量只是解决类似问题的其中之一的方法哦,相关资料可以使用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)来释放;根据需要你可以建立多个信号量对多个共享资源进行管理。
进去的时候把门关上,其他人进步来,出来的时候再把门打开
其他人就可以用了
具体来讲,全局变量是那个马桶,临界区就是那个门:)
sorry,太不雅了:)