免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: xyhost
打印 上一主题 下一主题

多线程访问数据库,临界资源同步的问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-06-23 08:28 |只看该作者
up

论坛徽章:
0
22 [报告]
发表于 2006-06-23 11:05 |只看该作者

这个数据库没用过……

但大凡数据库都有Lock的。
例如sql server ,你就可以:

SELECT * FROM Table1 WITH (XLOCK)

--xlock 就是sql server 的排他锁。
我估计楼主所用的数据库也有相应的方法。


值得说明一下: 实现排他的方法,应该在数据库来实现,而不是在前台程序来实现。

论坛徽章:
0
23 [报告]
发表于 2006-06-28 10:40 |只看该作者
这种东西可以用EJB来实现啊。。。

论坛徽章:
0
24 [报告]
发表于 2006-06-28 15:49 |只看该作者
pthread_rwlock_t

pthread_rwlock_rdlock()
pthread_rwlock_wrlock()
pthread_rwlock_unlock()

这是一个写者优先的读写锁,应该可以满足你的需求.

论坛徽章:
0
25 [报告]
发表于 2006-06-28 16:00 |只看该作者
我这里有berkeleyDB的关于锁的文档,不知道对你有没有帮助.
最近刚开始看这东东.

lock.rar

25.85 KB, 下载次数: 45

论坛徽章:
0
26 [报告]
发表于 2006-06-28 16:05 |只看该作者
原帖由 Momoass 于 2006-6-22 16:06 发表
两个全局变量不就解决了嘛,搞得那么复杂。
当需要完全锁定的时候就 F_LOCKED =FL_NRW;
当仅需要锁定写操作就 F_LOCLED =FL_NW;
不小需要锁定就 F_LOCKED =FL_WR;
线程在操作数据库时就 switch (F_LOCKED) ca ...


那你的全局变量就也是临界资源了.

论坛徽章:
0
27 [报告]
发表于 2006-06-28 16:52 |只看该作者
原帖由 Momoass 于 2006-6-22 16:06 发表
两个全局变量不就解决了嘛,搞得那么复杂。
当需要完全锁定的时候就 F_LOCKED =FL_NRW;
当仅需要锁定写操作就 F_LOCLED =FL_NW;
不小需要锁定就 F_LOCKED =FL_WR;
线程在操作数据库时就 switch (F_LOCKED) ca ...


这样也行?对变量的访问并不是原子操作,是不能避免冲突的

论坛徽章:
0
28 [报告]
发表于 2006-06-28 17:38 |只看该作者
Also, DB's databases and data structures are designed for concurrent access — they are
thread-safe, and they share well across multiple processes.

刚在BerkeleyDB的文档上看到的.
同步是由BerkeleyDB自己来保证的,楼主过虑了,呵呵.

[ 本帖最后由 unicorns 于 2006-6-28 17:41 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP