在线程安全环境中的休眠连接

在线程安全的 GBase 8s ESQL/C 应用中,DORMANT 选项使活动的连接成为休眠的。现在另一线程可通过发出不带 DORMANT 选项的 SET CONNECTION 语句来使用该连接。在一个 GBase 8s ESQL/C 应用中,线程安全的环境可有许多线程(执行特别任务的工作的并发部分),且每一线程可有一个活动的连接。

活动的连接与特定的线程相关联。两个线程不可分享相同的活动的连接。一旦线程使活动的连接成为休眠的,其他线程就可使用那个连接。仍然建立休眠的连接,但当前休眠的连接不与任何线程相关联。例如,如果在名为 thread_1 的线程中名为 con1 的连接是活动的,则名为 thread_2 的线程不可使连接 con1 成为它的活动连接,直到 thread_1 已使连接 con1 成为了休眠的为止。

下列来自线程安全的 GBase 8s ESQL/C 程序的代码片段展示在线程安全的应用之内,特定的线程是如何使连接成为活动的,通过此连接在表上执行工作,然后再使该连接成为休眠的,以便其他线程可使用该连接:
thread_2()
        {  /* 使 con2 成为活动的连接 */
        EXEC SQL connect to 'db2' as 'con2';
        /*Do insert on table t2 in db2*/
        EXEC SQL insert into table t2 values(10); 
        /* 使其他线程可使用 con2 */
        EXEC SQL set connection 'con2' dormant;
        }

如果使用 CONNECT . . . WITH CONCURRENT TRANSACTION 语句初始化了到数据库环境的连接,则随后连接到那个数据库环境的任何线程都可使用正在进行的事务。此外,如果开放的游标与这样的连接相关联,则当使该链接成为休眠的时,该游标保持打开。

在线程安全的 GBase 8s ESQL/C 应用之内的线程可通过使相关联的连接成为当前的来使用同一游标,即使在任何给定的时间仅一个线程可使用该连接。