安全|GBase 8s ESQLC创建线程安全的应用程序

GBase8s ESQL/C线程安全库
GBase8s ESQL/C提供了静态和共享的线程安全库, 线程安全GBase ESQL/C应用程序中的每一个线程都可以拥有一个活跃的连接, 一个应用程序可以拥有多个线程。
线程安全库中包含了线程安全函数。

GBase ESQL/C支持POSIX线程库。

在esql命令执行时, 提供-thread参数, esql将该参数传递给ESQL/C预处理器esqlc,根据-thread参数,esqlc生成线程安全的代码,确保多线程能够正常执行。

ESQL/C线程安全代码的特点:

  1. 线程安全代码不定义任何静态数据结构。
  2. 线程安全代码动态声明游标。
  3. 线程安全代码使用宏定义状态变量。

下面的图显示的线程安全应用程序建立了3个连接。
安全|GBase 8s ESQLC创建线程安全的应用程序
文章图片


在上面的图中, GBase ESQL/C程序包含了3个线程
  1. Main线程建立con1,连接Server_1上的数据库db1.
  2. Main线程创建Thread 2, Thread2建立con2, 连接Server_1上的数据库db1.
  3. 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’;
}

【安全|GBase 8s ESQLC创建线程安全的应用程序】可以通过调用ifx_getcur_conn_name()函数取得当前连接的名字。

    推荐阅读