- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ProC开发多线程应用程序
用Pro*C开发多线程应用程序? (注:本文来自Pro*C/C++?Precompiler?Programmers?Guide?Release?8.1.5)? 如果你的操作系统不支持线程,本文暂不适合你。本文包含以下几个部分:? n?什么是多线程?? n?Pro*C中的运行时上下文? n?运行时上下文的使用模式? n?多线程应用程序的用户接口? n?多线程例子? 一.什么是多线程?? 一个多线程的应用程序中,线程运行在共享的地址空间里。线程是在进程内部执行的“轻量”级子进程,它们共享代码段和数据段,但是有自己的程序计数器、寄存器和堆栈。全局变量和静态变量在线程之间是共享的,因此通常需要在程序中使用某种互斥机制来管理线程对这些变量的访问,互斥体Mutexes就是用来保证数据完整性的同步装置。? 有关互斥体的更多讨论,参看多线程编程方面的文章。? Proc*C编译器通过以下方式支持开发多线程的Oracle应用程序(在支持线程的平台上):? n?用一个命令行编译选项来产生线程安全的代码? n?用内嵌的SQL语句和指令支持多线程? n?线程安全的Lib库和其他客户端Lib库? 注意:也许你的平台支持某个特殊的线程包,但还是需要查看Oracle有关平台的文档,看看Oracle是否支持它。? 二.Pro*C中的运行时上下文? 为了在线程和数据库连接之间建立松散的结合,Pro*C引入了一个概念runtime_context,我们称之为运行时上下文。一个运行时上下文包含了以下资源和信息:? n?与数据库服务器的连接? n?当前连接上使用的游标? n?内嵌的一些选项,如MODE,HOLD_CURSOR,RELEASE_CURSOR和?SELECT_ERROR? 不仅仅是简单的支持线程和连接之间的松散结合,Pro*C编译器还允许开发人员在线程和运行时上下文之间建立松散的结合,Pro*C允许在程序里为运行时上下文定义一个句柄,通过这个句柄,运行时上下文可以在线程之间切换。? 例如,一个交互式应用程序创建了线程T1,来执行一个查询,并且返回了前10条记录,然后T1终止。在用户输入了必须的数据之后,程序又创建了线程T2,并且把T1使用的运行时上下文传给T2,这样T2可以在同一个游标上获取接下来10条的记录。? 三.运行时上下文的使用模式? 下面是在多线程的Pro*C程序中使用运行时上下文的两种可能模式:? n?多线程共享单个运行时上下文? n?多线程使用互相独立的运行时上下文? 不管采用哪种模式,不能在同一时刻多个线程共享同一个运行时上下文。如果两个或两个以上的线程在同一时刻试图使用同一个运行时上下文,将会出现以下错误:SQL-02131:?Runtime?context?in?use。? 1.多线程共享单个运行时上下文? 图(一)展示了一个运行在多线程环境中的应用程序,多个线程共享一个运行时上下文来执行SQL语句,运行时上下文不能在同一时刻被多个线程使用,图中的Mutex展示了如何防止这种并行使用。? 图(一)? 2.多线程使用互相独立的运行时上下文? 图(二)展示了使用多个运行时上下文的多线程应用程序,在这种情况下,程序不需要使用互斥锁Mutex,因为每个线程拥有一个独立的运行时上下文。? 图(二)? 四.多线程应用程序的用户接口? Pro*C编译器提供以下接口来支持多线程:? n?命令行选项,THREADS=YES|NO? n?内嵌SQL语句和指令? n?线程安全的公共库函数? 1.THREADS选项? 在proc预编译命令行上指定THREADS=YES,Pro*C编译器将保证产生的C代码是线程安全的。如果指定了THREADS=YES,Pro*C将会检查每个包含SQL执行语句的函数,是否指定了这些语句是在哪个运行时上下文中执行的,若没有发现这类指定标识,编译器就会返回错误。? 2.内嵌SQL语句和指令? 下列内嵌的SQL语句和指令用于支持多线程和运行时上下文的使用:? n?EXEC?SQL?ENABLE?THREADS;? n?EXEC?SQL?CONTEXT?ALLOCATE?:context_var;? n?EXEC?SQL?CONTEXT?USE?{:context_var/DEFAULT};? n?EXEC?SQL?CONTEXT?FREE?:context_var;? 在以上SQL语句中,context_var是运行时上下文句柄,它必须被定义成sql_context类型:如sql_contex
您可能关注的文档
最近下载
- (2025秋)人教版二年级数学上册全册教案(新教材).pdf
- 第二单元大单元教学设计 高一语文必修上册.docx VIP
- 2025年燃气安全生产管理人员模拟考试题库及答案.docx VIP
- 高中音乐 人音版 必修《音乐鉴赏》《舞动心弦——舞蹈音乐》 第四课时.pptx VIP
- 住院医师临床思维培养ppt模板.pptx VIP
- 反渗透纳滤组合工艺高盐废水深度处理及零排放预浓缩.pdf VIP
- 超声成像系统数字扫描变换器(参考).pptx VIP
- JTG3441-2024 公路工程无机结合料稳定材料试验规程.pdf VIP
- 腹腔镜下卵巢囊肿剥除术配合.pptx VIP
- 2026届高三语文一轮复习教学计划.docx
文档评论(0)