Informix支持一个进程中的多个线程同时对数据库进行操作,既可以多个线程使用多个数据库连接,也可以多个线程共享一个数据库连接。
无论是那种方式,都需要认真分析处理多线程的共享变量之间加锁、解锁的处理。
本文针对多线程的EC程序中的几个问题进行说明:
1、编译连接
当只有一个完整的ec文件时,可以使用ESQL的-thread选项,ESQL会自动编译连接线程安全的informix库。
当存在多个文件,包括ec、c、C文件时,可以首先使用ESQL的-c和-thread选项将ec文件编译成.o文件,然后使用连接器强制连接线程安全的库(th库)。
总之要求下面几点:
A、ESQL要加上-thread选项
B、配置环境变量THREADLIB=POSIX
C、保证连接的是线程安全的库。
2、多个线程共享一个连接
多个线程共享一个连接时,在连接建立好以后,可以在一个线程中使用
EXEC SQL set connection 'con' dormant;
将连接置于dormant状态,此时的连接可以被其它的线程激活。
其它线程使用
do {
EXEC SQL set connection 'con';
} while ( ( sqlca.sqlcode == -1802 ) );
将连接激活,此时可以访问数据库了,而且只用本线程可以访问数据库。
只有本线程将连接置为dormant后,才可以再被其它的线程使用。
3、多个线程使用多个连接
A、此时每个线程需要有自己的连接名,各个连接名必须不同。
B、必须仔细处理共享变量的互斥访问。
informix 多线程/多进程
最新推荐文章于 2022-03-27 21:33:31 发布