关于多线程访问同一变量的问题?

时间:2021-07-06 19:24:23
想问一下,如果是多线程工作方式下,会不会出现这种情况,一个线程在写一个全局变量,而另一个线程则在读该变量。出现这种情况,会有什么后果,会不会一个进程自动的等待另一进程,如果不是,有什么办法避免?

11 个解决方案

#1


学学 互斥,信号量,临界区 !!!

#2


找本 操作系统的书, 好好看看关于 互斥与同步 方面的内容..

出现这种情况,会有什么后果: 后果很严重 !!
会不会一个进程自动的等待另一进程,如果不是,有什么办法避免? 当然不是 ! 办法很多,就是我上面说的那些...

#3


CPU在某一时刻只能执行一条语句,所以你说的同时访问只是宏观上的,但在分时系统中这一定要考虑下,比如时间片用完,而关键的语句没有执行

#4


典型的线程同步的问题~

这是在写多线程程序不可避免的问题~

解决的办法可以采用:
互吃量
临界区
我一般喜欢互吃量~呵呵~

#5


这个对于中断和多线程都有这个问题
使用criticalsection 和 lock都是可以的

#6


如果是win平台。
如果是32位变量,可以用Interlocked系列函数操作,它们保证了互斥
InterlockedIncrement/InterlockedDecrement/InterlockedExchange/.....
其他的可以用CRITICAL_SECTION来保证互斥操作。
这两种是user mode的操作速度较快。

其他的还可以用mutex,semaphore,event来互斥,不过这都是内核对象,速度慢点。

#7


我说我的几个回复怎么没了,原来楼主信誉变了......

#8


p v  操作!

#9


》》》CPU在某一时刻只能执行一条语句,所以你说的同时访问只是宏观上的

同意 xianshiqi(日出西山)

#10


要加一个锁  保证一个线程访问的时候其他线程不能访问 否则数据出现的结果有可能能是错误的 比如两个线程同时访问一个变量对他加1  最后你在每个线程中所得到的结果可能是将这个数加2

#11


多线程的协调问题,如果在一个进程内,可以使用关键区,在不同的进程间,则可以使用事件对象、信号量、互斥量等技术

建议楼主看看《Win32多线程编程》(侯捷翻译的)或者操作系统的书

#1


学学 互斥,信号量,临界区 !!!

#2


找本 操作系统的书, 好好看看关于 互斥与同步 方面的内容..

出现这种情况,会有什么后果: 后果很严重 !!
会不会一个进程自动的等待另一进程,如果不是,有什么办法避免? 当然不是 ! 办法很多,就是我上面说的那些...

#3


CPU在某一时刻只能执行一条语句,所以你说的同时访问只是宏观上的,但在分时系统中这一定要考虑下,比如时间片用完,而关键的语句没有执行

#4


典型的线程同步的问题~

这是在写多线程程序不可避免的问题~

解决的办法可以采用:
互吃量
临界区
我一般喜欢互吃量~呵呵~

#5


这个对于中断和多线程都有这个问题
使用criticalsection 和 lock都是可以的

#6


如果是win平台。
如果是32位变量,可以用Interlocked系列函数操作,它们保证了互斥
InterlockedIncrement/InterlockedDecrement/InterlockedExchange/.....
其他的可以用CRITICAL_SECTION来保证互斥操作。
这两种是user mode的操作速度较快。

其他的还可以用mutex,semaphore,event来互斥,不过这都是内核对象,速度慢点。

#7


我说我的几个回复怎么没了,原来楼主信誉变了......

#8


p v  操作!

#9


》》》CPU在某一时刻只能执行一条语句,所以你说的同时访问只是宏观上的

同意 xianshiqi(日出西山)

#10


要加一个锁  保证一个线程访问的时候其他线程不能访问 否则数据出现的结果有可能能是错误的 比如两个线程同时访问一个变量对他加1  最后你在每个线程中所得到的结果可能是将这个数加2

#11


多线程的协调问题,如果在一个进程内,可以使用关键区,在不同的进程间,则可以使用事件对象、信号量、互斥量等技术

建议楼主看看《Win32多线程编程》(侯捷翻译的)或者操作系统的书