GBase8s ESQL/C线程安全库
GBase8s ESQL/C提供了静态和共享的线程安全库, 线程安全GBase ESQL/C应用程序中的每一个线程都可以拥有一个活跃的连接, 一个应用程序可以拥有多个线程。
1. 线程安全库中包含了线程安全函数。
2. GBase ESQL/C支持POSIX线程库。
- 在esql命令执行时, 提供-thread参数, esql将该参数传递给ESQL/C预处理器esqlc,根据-thread参数,esqlc生成线程安全的代码,确保多线程能够正常执行。
ESQL/C线程安全代码的特点:
- 线程安全代码不定义任何静态数据结构。
- 线程安全代码动态声明游标。
- 线程安全代码使用宏定义状态变量。
下面的图显示的线程安全应用程序建立了3个连接。
在上面的图中, GBase ESQL/C程序包含了3个线程
- Main线程建立con1,连接Server_1上的数据库db1.
- Main线程创建Thread 2, Thread2建立con2, 连接Server_1上的数据库db1.
- Main线程创建Thread 3, Thread3建立con3, 连接Server_2上的数据库db2.
上图中所有的连接con1,con2,con3都是同时活跃的,能够执行SQL语句。
下面的代码片段演示了建立线程安全的连接。
main()
{
EXEC SQL connect to ‘db1@Server_1’ as ‘con1’;
start_threads(); /* start 2 threads */
EXEC SQL select a into :a from t1; /* table t1 resides in db1 */
...
}
thread_1()
{
EXEC SQL connect to ‘db1@Server_1’ as ‘con2’;
EXEC SQL insert into table t2 values(10);/* table t2 is in db1 */
EXEC SQL disconnect ‘con2’;
}
thread_2()
{
EXEC SQL connect to ‘db2@Server_2’ as ‘con3’;
EXEC SQL insert into table t1 values(10);/* table t1 is in db2 */
EXEC SQL disconnect ‘con3’;
}
可以通过调用ifx_getcur_conn_name()函数取得当前连接的名字。