关于两个线程的问题
两个线程访问同一内存块,两个都去读,或者一个读一个写,
需要设置互斥条件么?
问题点数:0、回复次数:10Top
1 楼masterz(www.fruitfruit.com)回复于 2003-03-02 23:19:48 得分 0
一个读一个写需要设置互斥条件
两个都去读, no race condition.Top
2 楼yue621(对于有些事要视而不见)回复于 2003-03-03 09:54:09 得分 0
当然需要了,你需要用同步的方法,这样才能避免访问出错。Top
3 楼yue621(对于有些事要视而不见)回复于 2003-03-03 09:55:59 得分 0
因为,你读的时候,如果有另一个线程在写,那么你怎么保证你读的是写以前的还是写以后的, 还是正在写的?Top
4 楼zssgtt(活到老学到老)回复于 2003-03-03 10:22:38 得分 0
用临界量
LPCRITICAL_SECTION tCS;
InitializeCriticalSection(&tCS);
EnterCriticalSection(&tCS);
//do something here,读写共享内存块
LeaveCriticalSection(&tCS);Top
5 楼quace(quace)回复于 2003-03-06 21:34:47 得分 0
如果读的线程对写的内容要求不严格,比如写的线程只是一个计数,是否就不需要?
此次外临界量如何设?
只是写的线程设置?
Top
6 楼aben456(金珠MERP)回复于 2003-03-07 10:50:20 得分 0
比如:这是一个十字路口
在你写之前你要打开绿灯,这时别的线程看到的就是红灯,等待;
你写完了还要关掉绿灯,好让别的线程有权利打开这个绿灯,进行读写
核心就是同一时刻只有一个线程在操作;
(怎么没有人来发明高架桥呢,呵呵)
参考
http://expert.csdn.net/Expert/topic/1151/1151922.xml?temp=.9171564Top
7 楼quace(quace)回复于 2003-03-08 20:27:17 得分 0
可是对于cpu来说,同一时刻的确只有一个线程在操作啊
Top
8 楼ahao(天·狼·星星)回复于 2003-03-08 20:55:27 得分 0
一个高级语言的操作包含很多cpu指令,你能保证这么多指令是一个原子操作吗?
所以如果不是两个都读,就必须做同步Top
9 楼yndfcd(YNDFCD)回复于 2003-03-08 21:12:56 得分 0
如果读写只是一个计数,可以不用互斥,直接用InterLockExchange在用户态搞定。Top
10 楼wshcdr(dd)回复于 2003-03-09 11:01:10 得分 0
gzTop




