GBase8s ESQL/C线程安全库
GBase8s ESQL/C提供了静态和共享的线程安全库, 线程安全GBase ESQL/C应用程序中的每一个线程都可以拥有一个活跃的连接, 一个应用程序可以拥有多个线程。
线程安全库中包含了线程安全函数。
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.
下面的代码片段演示了建立线程安全的连接。
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()函数取得当前连接的名字。
推荐阅读
- database|GBase 8s 高可用简介
- 安全|GBase8s ESQL/C 跨线程连接
- 数据库|GBase 8s MPP产品简介
- 离线数仓|Hive 3.1.2 数仓基本概念 大致分层
- MySQL|第1章 数据库系统概论---数据库与机器学习
- Milvus 图形化管理工具 Attu 来袭!
- 算法|开学季——经典计算机教材带你起飞!
- Hive|Hive-sql连续登陆问题
- 数据仓库|浅谈数仓建设中的分层