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创建线程安全的应用程序_第1张图片

在上面的图中, 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’;

}

可以通过调用ifx_getcur_conn_name()函数取得当前连接的名字。

你可能感兴趣的:(安全,数据库,sql)