服务器线程访问数据库如何同步?

maomao85 2014-01-13 09:22:54
比如有2个线程A和B访问数据库中的某一个表form,那这2个线程该如何同步呢?
1.如果A和B访问的记录不是form中的同一条,是不是就不用同步?
2.往数据库中读写数据,同步程序是写在数据库的脚步,还是线程里面?
...全文
152 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
这个娜戒海了 2014-01-13
  • 打赏
  • 举报
回复
引用 3 楼 maomao85 的回复:
[quote=引用 2 楼 zhuyf87 的回复:] 多个线程同时访问同一个资源,需要互斥,用“临界区”、“互斥量”等都可以。
都是写在线程里是把?? 不是用在数据库的脚本里面? 临界区会造成死锁啊[/quote] 临界区怎么会造成死锁,除非你申请了不释放
worldy 2014-01-13
  • 打赏
  • 举报
回复
一般,数据库本身会使用同步控制,用户一般不需要关心同步问题
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 2 楼 zhuyf87 的回复:
多个线程同时访问同一个资源,需要互斥,用“临界区”、“互斥量”等都可以。
都是写在线程里是把?? 不是用在数据库的脚本里面? 临界区会造成死锁啊
zhuyf87 2014-01-13
  • 打赏
  • 举报
回复
多个线程同时访问同一个资源,需要互斥,用“临界区”、“互斥量”等都可以。
这个娜戒海了 2014-01-13
  • 打赏
  • 举报
回复
1.道理上是这么说,但是写个锁或临界区要通用性强点,而且可靠 2.往数据库写数据的话最好写在线程里面 坐等高人
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 16 楼 GLSC_CENA 的回复:
数据库不会出现多线程操作时的同步问题,因为在设计的时候,数据库已经全部考虑好了,正如四楼所说 但是你通过VC去操作数据库的时候,如果你的线程没有考虑到同步问题,那可能会出现误差。比如两个线程都要删除一条序号为x的数据,第一条删除了x,那序列的序号就变了,第二个线程再删除序号为x的数据就会产生误操作,举个简单的例子,可能不严谨,能理解就好
UP~~还是你给力~~
这个娜戒海了 2014-01-13
  • 打赏
  • 举报
回复
引用 15 楼 maomao85 的回复:
[quote=引用 14 楼 tiger9991 的回复:] 1.是 2.数据库层面的你不用担心,但是你自己业务逻辑造成的脏读,你自己要负责。 那什么时候用临界区,什么时候用互斥量呢?因为互斥量可以设置等待互斥对象的时间啊~ 线程级用临界区,进程级用互斥量
数据库层面的你不用担心,但是你自己业务逻辑造成的脏读,你自己要负责。什么意思?[/quote] 数据库不会出现多线程操作时的同步问题,因为在设计的时候,数据库已经全部考虑好了,正如四楼所说 但是你通过VC去操作数据库的时候,如果你的线程没有考虑到同步问题,那可能会出现误差。比如两个线程都要删除一条序号为x的数据,第一条删除了x,那序列的序号就变了,第二个线程再删除序号为x的数据就会产生误操作,举个简单的例子,可能不严谨,能理解就好
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 14 楼 tiger9991 的回复:
1.是 2.数据库层面的你不用担心,但是你自己业务逻辑造成的脏读,你自己要负责。 那什么时候用临界区,什么时候用互斥量呢?因为互斥量可以设置等待互斥对象的时间啊~ 线程级用临界区,进程级用互斥量
数据库层面的你不用担心,但是你自己业务逻辑造成的脏读,你自己要负责。什么意思?
傻X 2014-01-13
  • 打赏
  • 举报
回复
1.是 2.数据库层面的你不用担心,但是你自己业务逻辑造成的脏读,你自己要负责。 那什么时候用临界区,什么时候用互斥量呢?因为互斥量可以设置等待互斥对象的时间啊~ 线程级用临界区,进程级用互斥量
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
不是说不要同步,而是数据库驱动做了支持,不需要你自己操心
那我需要操心的是什么?
这个娜戒海了 2014-01-13
  • 打赏
  • 举报
回复
引用 7 楼 maomao85 的回复:
[quote=引用 5 楼 GLSC_CENA 的回复:] 临界区怎么会造成死锁,除非你申请了不释放
那什么时候用临界区,什么时候用互斥量呢?因为互斥量可以设置等待互斥对象的时间啊~[/quote] 临界区和互斥量选一即可
这个娜戒海了 2014-01-13
  • 打赏
  • 举报
回复
引用 9 楼 maomao85 的回复:
[quote=引用 8 楼 worldy 的回复:] 数据库驱动会自动协调,数据库内部一般都有记录锁定机制
你的意思就是多线程访问数据库的时候,线程之间就不需要同步了? 如果多线程访问的不是数据库,是某个共享内存区域,就要同步? [/quote] 问题宝宝,我还是建议你从头开始学,你如果一点都没有概念,打破沙锅问到底,糊涂的还是你自己
worldy 2014-01-13
  • 打赏
  • 举报
回复
引用 9 楼 maomao85 的回复:
[quote=引用 8 楼 worldy 的回复:] 数据库驱动会自动协调,数据库内部一般都有记录锁定机制
你的意思就是多线程访问数据库的时候,线程之间就不需要同步了? 如果多线程访问的不是数据库,是某个共享内存区域,就要同步? [/quote] 不是说不要同步,而是数据库驱动做了支持,不需要你自己操心
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
数据库驱动会自动协调,数据库内部一般都有记录锁定机制
你的意思就是多线程访问数据库的时候,线程之间就不需要同步了? 如果多线程访问的不是数据库,是某个共享内存区域,就要同步?
worldy 2014-01-13
  • 打赏
  • 举报
回复
引用 6 楼 maomao85 的回复:
[quote=引用 4 楼 worldy 的回复:] 一般,数据库本身会使用同步控制,用户一般不需要关心同步问题
什么意思?但是我2个线程并发连接数据库,对表进行操作的时候,还是要同步把?[/quote] 数据库驱动会自动协调,数据库内部一般都有记录锁定机制
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 5 楼 GLSC_CENA 的回复:
临界区怎么会造成死锁,除非你申请了不释放
那什么时候用临界区,什么时候用互斥量呢?因为互斥量可以设置等待互斥对象的时间啊~
maomao85 2014-01-13
  • 打赏
  • 举报
回复
引用 4 楼 worldy 的回复:
一般,数据库本身会使用同步控制,用户一般不需要关心同步问题
什么意思?但是我2个线程并发连接数据库,对表进行操作的时候,还是要同步把?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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