加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用于Oracle数据库访问的线程安全的全局sqlca结构

发布时间:2020-12-12 13:14:53 所属栏目:百科 来源:网络整理
导读:我有一个使用Oracle Pro C预编译器的多线程(posix线程或基于pthread)的C应用程序.该应用程序使用全局sqlca结构.在一个.c文件中,它包含用于Oracle数据库访问的全局sqlca结构定义: #include sqlca.h 在所有其他的c文件中,它使用如下: #define SQLCA_STORAGE_
我有一个使用Oracle Pro C预编译器的多线程(posix线程或基于pthread)的C应用程序.该应用程序使用全局sqlca结构.在一个.c文件中,它包含用于Oracle数据库访问的全局sqlca结构定义:

#include <sqlca.h>

在所有其他的c文件中,它使用如下:

#define SQLCA_STORAGE_CLASS extern
   #include <sqlca.h>

我的问题是,如果多个线程试图访问数据库表进行查询,插入或更新并使用全局sqlca对象,我如何保证互斥或使其成为线程安全访问?
另外,当我查询vs插入/更新时,他们都使用sqlca结构吗?

解决方法

您可以拥有一个抓取互斥对象的全局函数,以及一个返回互斥对象的全局函数.

需要使用数据库的线程尝试调用抓取互斥锁的函数.如果互斥锁已在使用中,则该函数返回0.如果互斥锁可用,则抓取互斥锁功能将互斥锁标记为不可用,并返回1表示成功.

抓取互斥锁的任何后续调用都将失败,直到成功获取互斥锁的线程调用返回互斥锁函数.

尝试和未能获取互斥锁的任何线程都可以进入循环,直到成功获取互斥锁(即线程将等待互斥锁).也可以在这里设置超时.

互斥对象可以像bool一样简单,也可以使用其他更复杂的互斥锁(windows.h具有互斥对象).

如果您创建自己的互斥锁,那么它很不稳定,它是易失性的.

如果没有线程拥有互斥锁,则没有线程可以访问数据库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读