GBase8s ESQL/C 跨线程连接

        如果多线程应用程序需要使用同一个连接, 那么GBase8sESQL/C应用程序则会进行管理这些连接。

        其中最简单的方式是将SET CONNECTION语句放到一个循环中。

/* wait for connection: error -1802 indicates that the connection is in use */

do

{

  EXEC SQL SET CONNECTION :con_name;

} while (SQLCODE == -1802)

        此时,当SQLCODE不等于-1802,说明在当前线程中,SET CONNECTION已经正确设定了当前的连接。


        下面的代码片段显示跨连接的多线程应用程序

main()

{

  EXEC SQL BEGIN DECLARE SECTION;

Int a;

  EXEC SQL END DECLARE SECTION;

  start_thread(); /* start 2 threads */

  

  EXEC SQL SET CONNECTION ‘con1’;

  EXEC SQL update table t1 set a = 40 where a = 10;



  /* disconnect all connections */

  EXEC SQL DISCONNECT ALL;

}

thread_1()

{

  EXEC SQL connect to ‘db1’ as ‘con1’;

  EXEC SQL insert into table t1 values(10); /* table t1 is in db1 */



  /* make con1 available to other thread */

  EXEC SQL set connection ‘con1’ dormant;



/* wait for con2 to become available and then update t2 */

do

{

    EXEC SQL SET CONNECTION ‘con2’;

} while (SQLCODE == -1802)

If (SQLCODE != 0)

{

  return;

}

EXEC SQL update t2 set a = 12 where a= 10; /* table t2 is in db2 */

EXEC SQL set connection ‘con2’ dormant;

}

thread_2()

{

  /* make con2 an active connection */

  EXEC SQL connect to ‘db2’ as ‘con2’;

  EXEC SQL insert into table t2 values(10); /* t able t2 is in db2 */

  /* make con2 available to other thread */

  EXEC SQL set connection ‘con2’ dormant;

}

        在上面的代码片段中, thread_1()使用SET CONNECTION循环等待con2变得可以使用。

        当thread_2()设定con2dormant时,其他线程才能够使用con2, 在这个时候thread_1()中的SET CONNECTION才能够正确执行,然后更新t2表。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八珍豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值