免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3169 | 回复: 2
打印 上一主题 下一主题

db2 多线程编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-14 15:31 |只看该作者 |倒序浏览
我用嵌C进行多线程编程时发现了一个怪问题。
问题这样的:

多个线程分别解析自己的数据文件插入相应的表中。
多个线程时共享主线程中的一个数据库连接(也就是在主线程中connect to db后再
pthread_create);
多线程同时入库时,其中会又一些记录报-803记录重复的错误,
而且每次重新做一编的时候报错的记录行数都不一样。

如果用单线程(一个文件一个文件的入库)则不会报错。

我查看了一个db2的samples里有个db2thrds.sqc,他做了一个context pool, 创建线程时
从池中分配一个context给它,每个线程在自己的context里connect to db。

我的问题是不能多个线程共享一个context吗?
我的线程里没有复杂的sql,只有一个prepare 和一个execute语句。
而且都是操作自己相应的表,没有两个线程共享表的现象。


请各位大侠指教。
非常感谢。

论坛徽章:
0
2 [报告]
发表于 2006-02-15 09:46 |只看该作者
我做过类似的,但我都是操作一个表,

还只是查询,都不行

你最好用手动分配上下文的方式,

来做;

作一个连接池(每一个线程一个上下文)

论坛徽章:
0
3 [报告]
发表于 2006-02-15 14:53 |只看该作者
非常感谢你的回复,

手工分配上下文的方式要求在
每个context里有一个connect to db。

因为我的每个线程都需要常连接。
现在有60多个线程就有60多个数据库连接了,太多了。。。

操作系统对每个进程可以attach的最大共享内存段数是有限的(每个connect to db
需要一个共享内存段)。

例如AIX就只允许一个用户进程最大attatch 10个共享内存段,也就是
只能拥有10个数据库连接
(虽然可以通过打开环境变量EXTSHM去掉此限制,但我认为那不是个好办法)。

我的意思是有没有什么办法让多个线程共享某一个数据库连接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP