首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问 多个线程共同访问的有关问题

2012-03-20 
请教 多个线程共同访问的问题请问以下,多个线程 同时读 一个对象的时候,哪种情况会出现问题?1. 一个简单变

请教 多个线程共同访问的问题
请问以下,多个线程 同时读 一个对象的时候,哪种情况会出现问题?

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


我曾经开了若干个线程 同时访问 上述对象 持续了几分钟,没有出现问题 。
是我幸运 还是 对于读操作这些对象 可以安全的并发执行?
谢谢

[解决办法]
1. 一个简单变量 
2. 一个容器类型 
3. 一个文件
只读的话没有问题。

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

5. 多个线程使用 Connection, Command, Recordset, 或者Field对象的时候 
看你使用的对象是不是thread safe,需要看文档确认。
[解决办法]
各种锁,互斥锁,共享锁,自旋锁

千万别死锁
[解决办法]
4. 多个线程共同访问一个SQL SERVER 表 
//我使用ADO 每个线程中开一个Connection 对象,连接串是一样的 
这样应该没问题。

5. 多个线程使用 Connection, Command, Recordset, 或者Field对象的时候
看你使用的对象是不是thread safe,需要看文档确认。 
//这个没有看明白,能稍微详细解释一下么 ?谢谢
有的类本质上就是为了多线程设计的,这样的类称为thread safe,可以多线程同时访问,资源的加锁和解锁都在那个类的内部完成,不需要程序员特意考虑了。不过一个类是不是thread safe是需要查文档确认的。
[解决办法]
推荐 <<multithreading applications in win32>> 去看一看好了
[解决办法]
不是任何时候都需要加锁的,这是个具体情况需要具体分析的问题。对于并发只读访问而言,对简单变量和STL容器是安全的。其它,取决于调用函数的实现(STL 也是实现保证了访问函数的线程安全)。

热点排行