多线程操作同一变量

时间:2021-03-27 18:09:45
一个线程连续写参数入一文件,另一个线程定时修改这个参数,这个参数我用的是全局变量。现在发现文件存储的参数与设置有些不符。应该怎样保证同步?有没有什么例子?谢谢。

17 个解决方案

#1


其实就是线程之间的同步,很多程序都会有这样的问题,同步方式很多,查查吧

#2


很多方法啊,比如用互斥对象、信号量、临界区都可以实现的,msdn上有很多相关内容
建议线程间同步用临界区,因为代码不需要进入内核段,效率较高
示例http://www.vckbase.com/document/viewdoc/?id=804

#3


使用临界区比较好,也比较方便。

CRITICAL_SECTION m_cs;//在头文件中定义
InitializeCriticalSection(&m_cs);//初始化

EnterCriticalSection(&m_cs);
……//对被保护的数据或文件进行参照
LeaveCriticalSection(&m_cs);//操作完毕后千万不要忘记解锁,否则会引起死锁

DeleteCriticalSection(&m_cs);//结束后删除释放资源,最好在析构函数中释放

#4


同步问题,使用其中一种OK了

#5


用临界区,mfc用CCriticalSection就很简单,通用的用3楼就行。

#6


临界区,互斥,都可以的……

#7


帮顶一下

#8


临界区等,修改变量前,线程进入临界区,修改完数据后,退出临界区...

#9


http://www.vckbase.com/document/viewdoc/?id=727

#10


最好加上处理 可能会存在潜在问题

#11


其实还是看例子方便!楼主可以下载这个例子:
http://download.csdn.net/source/1123495
里面有最简单的方法!很实用!

#12


互斥量、临界区等等,网上搜一下“线程同步”,

#13


MFC的话用这个:
CCriticalSection global_CriticalSection;
修改前:global_CriticalSection.Lock();
修改后:global_CriticalSection.Unlock();

#14


同一进程内一般用临界区,程序中所有要访问该变量以及与该变量相关的其它需要同步处理的数据时,先进入临界区,访问后再离开临界区。

#15


该回复于2009-04-07 10:38:14被版主删除

#16


用临界区可以实现
关键代码段也可以
例子你可以看看孙鑫老师的教程上
他有例子
www.xizi123.cn

#17


支持一下

#1


其实就是线程之间的同步,很多程序都会有这样的问题,同步方式很多,查查吧

#2


很多方法啊,比如用互斥对象、信号量、临界区都可以实现的,msdn上有很多相关内容
建议线程间同步用临界区,因为代码不需要进入内核段,效率较高
示例http://www.vckbase.com/document/viewdoc/?id=804

#3


使用临界区比较好,也比较方便。

CRITICAL_SECTION m_cs;//在头文件中定义
InitializeCriticalSection(&m_cs);//初始化

EnterCriticalSection(&m_cs);
……//对被保护的数据或文件进行参照
LeaveCriticalSection(&m_cs);//操作完毕后千万不要忘记解锁,否则会引起死锁

DeleteCriticalSection(&m_cs);//结束后删除释放资源,最好在析构函数中释放

#4


同步问题,使用其中一种OK了

#5


用临界区,mfc用CCriticalSection就很简单,通用的用3楼就行。

#6


临界区,互斥,都可以的……

#7


帮顶一下

#8


临界区等,修改变量前,线程进入临界区,修改完数据后,退出临界区...

#9


http://www.vckbase.com/document/viewdoc/?id=727

#10


最好加上处理 可能会存在潜在问题

#11


其实还是看例子方便!楼主可以下载这个例子:
http://download.csdn.net/source/1123495
里面有最简单的方法!很实用!

#12


互斥量、临界区等等,网上搜一下“线程同步”,

#13


MFC的话用这个:
CCriticalSection global_CriticalSection;
修改前:global_CriticalSection.Lock();
修改后:global_CriticalSection.Unlock();

#14


同一进程内一般用临界区,程序中所有要访问该变量以及与该变量相关的其它需要同步处理的数据时,先进入临界区,访问后再离开临界区。

#15


该回复于2009-04-07 10:38:14被版主删除

#16


用临界区可以实现
关键代码段也可以
例子你可以看看孙鑫老师的教程上
他有例子
www.xizi123.cn

#17


支持一下