pro*C 中的并发处理问题!

tyqiu 2004-03-24 11:24:34
在main中fork了10个子进程,每个子进程都对通一张表操作,(select和delete)
,程序起来后就不动了,是否是锁的问题啊?
改为单进程实现就没问题,怎么解决啊,着急呀!
...全文
26 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshcdr 2004-03-24
  • 打赏
  • 举报
回复
不明白,顶
liao2001 2004-03-24
  • 打赏
  • 举报
回复
你是显式加锁还是让数据库自动加锁?
假设采用的自动加锁:
关于oracle的锁机制,你察看oracle的帮助应该可以找到些东西,主要是看共享锁(share),不同的数据库的共享锁的生命周期好像是不一样的,假如oracle的共享锁会保持到事务结束的话,那你的proc代码就可能会引起死锁;如果数据读取后共享锁就释放的话,那死锁就不应该产生。

单进程是一个一个事务串行处理,会死锁才怪。

你可以试着给在事务给表加上独占锁,但这样的话你就需要尽量将事务的粒度缩小:
在某个事务重要对某个表加独占锁可以先执行一条会产生独占锁的sql语句,该语句的where条件为假就行,比如:
update tab_name set a=1 where 1=2
tyqiu 2004-03-24
  • 打赏
  • 举报
回复
每次都commit或rollback了
wingfiring 2004-03-24
  • 打赏
  • 举报
回复
你在事务完成后commit了吗?是不是造成死锁了?
tyqiu 2004-03-24
  • 打赏
  • 举报
回复
每个进程都对表处理,怎么考虑时间的分配?
zhanglixin 2004-03-24
  • 打赏
  • 举报
回复
估计是你没考虑好进程中的时间分配问题。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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