请教 多个线程共同访问的问题

ostrich2fly 2007-10-11 09:28:02
请问以下,多个线程 同时读 一个对象的时候,哪种情况会出现问题?

1. 一个简单变量
2. 一个容器类型
3. 一个文件
4. 多个线程共同访问一个SQL SERVER 表
5. 多个线程使用 Connection, Command, Recordset, 或者Field对象的时候


我曾经开了若干个线程 同时访问 上述对象 持续了几分钟,没有出现问题 。
是我幸运 还是 对于读操作这些对象 可以安全的并发执行?
谢谢
...全文
217 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2007-10-15
  • 打赏
  • 举报
回复
不是任何时候都需要加锁的,这是个具体情况需要具体分析的问题。对于并发只读访问而言,对简单变量和STL容器是安全的。其它,取决于调用函数的实现(STL 也是实现保证了访问函数的线程安全)。
bing_huo 2007-10-15
  • 打赏
  • 举报
回复
推荐 <<multithreading applications in win32>> 去看一看好了
张琪Samuel 2007-10-15
  • 打赏
  • 举报
回复
4. 多个线程共同访问一个SQL SERVER 表
//我使用ADO 每个线程中开一个Connection 对象,连接串是一样的
这样应该没问题。

5. 多个线程使用 Connection, Command, Recordset, 或者Field对象的时候
看你使用的对象是不是thread safe,需要看文档确认。
//这个没有看明白,能稍微详细解释一下么 ?谢谢
有的类本质上就是为了多线程设计的,这样的类称为thread safe,可以多线程同时访问,资源的加锁和解锁都在那个类的内部完成,不需要程序员特意考虑了。不过一个类是不是thread safe是需要查文档确认的。
ostrich2fly 2007-10-11
  • 打赏
  • 举报
回复
4. 多个线程共同访问一个SQL SERVER 表
要看你用什么连接方式了,如果一个线程一个连接,肯定没问题。

//我使用ADO 每个线程中开一个Connection 对象,连接串是一样的

5. 多个线程使用 Connection, Command, Recordset, 或者Field对象的时候
看你使用的对象是不是thread safe,需要看文档确认。

//这个没有看明白,能稍微详细解释一下么 ?谢谢
张琪Samuel 2007-10-11
  • 打赏
  • 举报
回复
1. 一个简单变量
2. 一个容器类型
3. 一个文件
只读的话没有问题。

4. 多个线程共同访问一个SQL SERVER 表
要看你用什么连接方式了,如果一个线程一个连接,肯定没问题。

5. 多个线程使用 Connection, Command, Recordset, 或者Field对象的时候
看你使用的对象是不是thread safe,需要看文档确认。
scalene 2007-10-11
  • 打赏
  • 举报
回复
如果你能确定所有程序都只是读数据,而没有写操作的话,就都是安全的,因为没有“脏数据”的问题。
scalene 2007-10-11
  • 打赏
  • 举报
回复
如果你能确定所有程序都只是读数据,而没有任何写入的话,是安全的,因为不存在脏数据的问题。
ckt 2007-10-11
  • 打赏
  • 举报
回复
都需要设置锁来控制
飞哥 2007-10-11
  • 打赏
  • 举报
回复
各种锁,互斥锁,共享锁,自旋锁

千万别死锁
pridesnow 2007-10-11
  • 打赏
  • 举报
回复
为了保持程序的同步一致性,应该加 “锁”。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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