用于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对象,我如何保证互斥或使其成为线程安全访问? 解决方法您可以拥有一个抓取互斥对象的全局函数,以及一个返回互斥对象的全局函数.需要使用数据库的线程尝试调用抓取互斥锁的函数.如果互斥锁已在使用中,则该函数返回0.如果互斥锁可用,则抓取互斥锁功能将互斥锁标记为不可用,并返回1表示成功. 抓取互斥锁的任何后续调用都将失败,直到成功获取互斥锁的线程调用返回互斥锁函数. 尝试和未能获取互斥锁的任何线程都可以进入循环,直到成功获取互斥锁(即线程将等待互斥锁).也可以在这里设置超时. 互斥对象可以像bool一样简单,也可以使用其他更复杂的互斥锁(windows.h具有互斥对象). 如果您创建自己的互斥锁,那么它很不稳定,它是易失性的. 如果没有线程拥有互斥锁,则没有线程可以访问数据库. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ok6410移植sqlite3
- c – 在OpenCV中是否有类似MATLAB的’impixelinfo()’功能?
- ruby-on-rails – 帮助加入Rails 3
- ruby-on-rails – 如何将Wrap Bootstrap主题集成到Rails应用
- c# – 如何确定一个点是否在shapefile中的形状内?
- c# – 显示GridView的页脚总数,并在最后一列中添加列(行虎钳
- ruby-on-rails – 改变索引页 – Ruby on Rails
- Confluence 6 下载和安装 Oracle thin 驱动
- ruby-on-rails – Rails教程3,stylesheet_link_tag生成错误
- Cocos2d-x 3.0-绘图节点Node中的Schedule