|
|
结帖:
OCI的线程安全需要一点额外的处理,简单的讲,OCI的环境句柄不支持同时挂多个服务,多个context 多个 statement 并同时进行 增删改查操作或者其他的DDL操作,其本身是不支持并行的,即便使用了OCI的互斥锁,或者操作系统的互斥锁,其互斥后的操作也是线性的,想实现共享的环境句柄通过加锁可以解决稳定问题,但达不到期望的并行效率效果。
sqlora.dll是很多连接或者中间件的数据库连接配件(以前在delphi/C++builder的数据源配置中很多有用这个的,texcdo中间件我也见过用这个的),这次看到yu老师不知道从哪里搞到的sqlora8的源码,看里头作者的意思是,环境句柄还是使用独占式的,一个线程一个连接,连接过程中独占环境句柄,多个就弄连接池,一堆环境句柄,这个效果是可期的,在session中查到的连接数也是符合预期的。
补充一点:关于线程操作:
使用OCI的线程函数和结构实现多线程,应该是oci最推荐的,比一般的操作系统的多线程多了一些操作步骤,但估计是最稳定的,只是函数太多,想做一个线程,估计得增加不少OCI线程结构变量,各种都有,一一与操作系统对应,我用着不太习惯,比操作系统的略繁琐;
使用三方的线程库 如 pthread 这是跨平台的,也可以;
直接使用贴合操作系统的原生线程API,也可以的。 |
|