临界区问题,刘麻子等高手请进 ( 积分: 50 )

  • 主题发起人 主题发起人 愚鱼
  • 开始时间 开始时间

愚鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有这样一个问题,用到了多线程,在多线程处理的部分涉及不到线程之间互斥的问题,而是在主线程要同时对全局设的一个“队列“变量存在同时在队头读取信息,在队尾写入信息的操作,应该地用到互斥的问题,但我查了一些资料,这种操作都是在处理多线程的部分中进行操作的,向我这种问题应该怎么处理啊,请各位高手明示。
 
我现在有这样一个问题,用到了多线程,在多线程处理的部分涉及不到线程之间互斥的问题,而是在主线程要同时对全局设的一个“队列“变量存在同时在队头读取信息,在队尾写入信息的操作,应该地用到互斥的问题,但我查了一些资料,这种操作都是在处理多线程的部分中进行操作的,向我这种问题应该怎么处理啊,请各位高手明示。
 
主线程也是线程,所以主线程和子线程在读写全局队列是都要放在临界区中保护
 
统一楼上的说法,只要是线程之间通信,就必须考虑线程的同步问题
 
还有个问题就是
InitializeCriticalSection(InterlockedCrit);
EnterCriticalSection( InterlockedCrit );
.......具体要入的程序语句(getwebpag(参数一,参数二,参数三));
LeaveCriticalSection( InterlockedCrit );
我不太明白。在具体要入的程序语句中如果其中的“参数二”是个全局变量,函数放入临界区的目的就是为了“参数二”,但我不知道我现在采用的这种方法是只对“参数二”进行了保护,还是对“参数一,参数二,参数三”都进行了保护,还是对整个getwebpag(参数一,参数二,参数三)代码段进行了保护?
 
把参数二做成属性,对属性的写进行监界区保护吧。
或者你把监界区放在那个getwebpag()里面对参数二的修改处。
不再用时记得调用DeleteCriticalSection(InterlockedCrit)删除监界区变量
 
开卷有益,不过好像有点难,摸不着边。
 
可以用TCriticalSectio对象来实现
 
后退
顶部