线程同步问题,急等!!!!

wuleixxh 2007-06-18 04:39:53
我现在有一个信息通信程序,里面有4个线程.
一,循环检测数据库中是否有新信息,如果有就取出来然后发给需要此信息的客户端(这中间需要按照客户端的请求条件进行过滤).
二,根据用户的操作一次性读取当前的信息
三,按用户的搜索条件提供信息
四,用户退出,把当前用户的数据从用户队列中清除

其中一,二,三之间不需要同步,他们各自处理自己的数据,但是这四个线程又都存在对用户队列数据的访问,如果前三个线程不同步,当第四个清除时,前三个有可能会访问已经被清掉的用户数据,导致程序崩溃,然后如果要同步(我用的是临界区),因为线程中要频繁访问数据库,还要循环遍历用户队列,是个相对来说很长的时间周期,从而导致别的线程掛起,而客户端会因收不到数据而超时.
(我看了一些资料,都说临界区一定要处理相当短的代码,不能有外部介入的代码在里面,而我的这些数据库访问会大大提供处理时间)
请问各位高手有没有什么好的解决方法
急等
...全文
243 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuleixxh 2007-06-19
  • 打赏
  • 举报
回复
高手呢?
wuleixxh 2007-06-19
  • 打赏
  • 举报
回复
因为在从数据库中读取的数据集中遍历每条数据时都要访问用户队列
feimingbiao 2007-06-19
  • 打赏
  • 举报
回复
"因为线程中要频繁访问数据库,还要循环遍历用户队列,是个相对来说很长的时间周期"
==============================================================================

不明白为什么数据库的访问为什么要放到Critical Section里面,你只要保护好你的队列就好了。遍历队列的时间不会太长。因为都是in memory操作。
wuleixxh 2007-06-18
  • 打赏
  • 举报
回复
没有人能回答了吗?
wuleixxh 2007-06-18
  • 打赏
  • 举报
回复
请问二楼的,如果做到你说的1、2、3线程以4线程为前题,即只有在4没有运行的情况下,才运行1、2、3线程
zdleek 2007-06-18
  • 打赏
  • 举报
回复
其实临界区也可以的,你加上实际用一下就知道结果了
ouyh12345 2007-06-18
  • 打赏
  • 举报
回复
1、2、3线程以4线程为前题,即只有在4没有运行的情况下,才运行1、2、3线程
WizardK 2007-06-18
  • 打赏
  • 举报
回复
你改用信号量试试

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧