- 论坛徽章:
- 0
|
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns ="urn:schemas-microsoft-com ffice ffice"
xmlns:w="urn:schemas-microsoft-com ffice:word"
xmlns="http://www.w3.org/TR/REC-html40">;
<head>;
<meta http-equiv=Content-Type content="text/html; charset=GB2312">;
<meta name=ProgId content=Word.Document>;
<meta name=Generator content="Microsoft Word 9">;
<meta name=Originator content="Microsoft Word 9">;
<link rel=File-List href="./用Proc.files/filelist.xml">;
<link rel=Edit-Time-Data href="./用Proc.files/editdata.mso">;
<!--[if !mso]>;
<style>;
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>;
<![endif]-->;
<title>;用Proc*C开发多线程应用程序</title>;
<!--[if gte mso 9]>;<xml>;
<o ocumentProperties>;
<o:Author>;BAIJIANFENG</o:Author>;
<o:LastAuthor>;BAIJIANFENG</o:LastAuthor>;
<o:Revision>;2</o:Revision>;
<o:TotalTime>;315</o:TotalTime>;
<o:Created>;2003-12-16T09:30:00Z</o:Created>;
<o:LastSaved>;2003-12-16T09:30:00Z</o:LastSaved>;
<o ages>;6</o ages>;
<o:Words>;623</o:Words>;
<o:Characters>;3556</o:Characters>;
<o:Lines>;29</o:Lines>;
<o aragraphs>;7</o aragraphs>;
<o:CharactersWithSpaces>;4367</o:CharactersWithSpaces>;
<o:Version>;9.2812</o:Version>;
</o ocumentProperties>;
</xml>;<![endif]-->;<!--[if gte mso 9]>;<xml>;
<w:WordDocument>;
<w unctuationKerning/>;
<w rawingGridVerticalSpacing>;7.8 磅</w rawingGridVerticalSpacing>;
<w isplayHorizontalDrawingGridEvery>;0</w isplayHorizontalDrawingGridEvery>;
<w isplayVerticalDrawingGridEvery>;2</w isplayVerticalDrawingGridEvery>;
<w:Compatibility>;
<w:SpaceForUL/>;
<w:BalanceSingleByteDoubleByteWidth/>;
<w oNotLeaveBackslashAlone/>;
<w:ULTrailSpace/>;
<w oNotExpandShiftReturn/>;
<w:AdjustLineHeightInTable/>;
<w:UseFELayout/>;
</w:Compatibility>;
</w:WordDocument>;
</xml>;<![endif]-->;
<style>;
<!--
/* Font Definitions */
@font-face
{font-family:Helvetica;
panose-1:2 11 6 4 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:536902279 -2147483648 8 0 511 0;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:256256023;
mso-list-type:hybrid;
mso-list-template-ids:2001386980 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:63.0pt;
mso-level-number-position:left;
margin-left:63.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l1
{mso-list-id:579826186;
mso-list-type:hybrid;
mso-list-template-ids:-1724586454 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l2
{mso-list-id:718942354;
mso-list-type:hybrid;
mso-list-template-ids:557603014 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:63.0pt;
mso-level-number-position:left;
margin-left:63.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l3
{mso-list-id:772096379;
mso-list-type:hybrid;
mso-list-template-ids:-2062763242 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:63.0pt;
mso-level-number-position:left;
margin-left:63.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l4
{mso-list-id:879172157;
mso-list-type:hybrid;
mso-list-template-ids:-1582132598 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:63.0pt;
mso-level-number-position:left;
margin-left:63.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l5
{mso-list-id:1086263291;
mso-list-type:hybrid;
mso-list-template-ids:2133460926 1436423620 67698689 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l5:level1
{mso-level-number-format:japanese-counting;
mso-level-text:%1.;
mso-level-tab-stop:21.0pt;
mso-level-number-position:left;
margin-left:21.0pt;
text-indent:-21.0pt;}
@list l5:level2
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l6
{mso-list-id:1127746434;
mso-list-type:hybrid;
mso-list-template-ids:1616175104 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l6:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l7
{mso-list-id:1217283044;
mso-list-type:hybrid;
mso-list-template-ids:-735302302 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l7:level1
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l8
{mso-list-id:1333989531;
mso-list-type:hybrid;
mso-list-template-ids:1919304440 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l8:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:21.0pt;
mso-level-number-position:left;
margin-left:21.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l8:level2
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l9
{mso-list-id:1341615233;
mso-list-type:hybrid;
mso-list-template-ids:-1543726742 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l9:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l10
{mso-list-id:1587610112;
mso-list-type:hybrid;
mso-list-template-ids:-735302302 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l10:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l11
{mso-list-id:1705448739;
mso-list-type:hybrid;
mso-list-template-ids:1023593220 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l11:level1
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l11:level2
{mso-level-number-format:bullet;
mso-level-text:\F06E;
mso-level-tab-stop:63.0pt;
mso-level-number-position:left;
margin-left:63.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l12
{mso-list-id:1758599926;
mso-list-type:hybrid;
mso-list-template-ids:505807338 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l12:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l13
{mso-list-id:1778909901;
mso-list-type:hybrid;
mso-list-template-ids:1656889716 1436423620 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l13:level1
{mso-level-number-format:japanese-counting;
mso-level-text:%1.;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;}
@list l14
{mso-list-id:2019262328;
mso-list-type:hybrid;
mso-list-template-ids:-869653106 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l14:level1
{mso-level-number-format:bullet;
mso-level-text:\F06C;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;
font-family:Wingdings;}
@list l15
{mso-list-id:2022193855;
mso-list-type:hybrid;
mso-list-template-ids:-1543726742 1436423620 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l15:level1
{mso-level-number-format:japanese-counting;
mso-level-text:%1.;
mso-level-tab-stop:42.0pt;
mso-level-number-position:left;
margin-left:42.0pt;
text-indent:-21.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->;
</style>;
<!--[if gte mso 9]>;<xml>;
<o:shapedefaults v:ext="edit" spidmax="2050"/>;
</xml>;<![endif]-->;<!--[if gte mso 9]>;<xml>;
<o:shapelayout v:ext="edit">;
<o:idmap v:ext="edit" data="1"/>;
</o:shapelayout>;</xml>;<![endif]-->;
</head>;
<body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'>;
<div class=Section1 style='layout-grid:15.6pt'>;
<p class=MsoNormal>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal align=center style='text-align:center'>;<span
style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;用</span>;<span
lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt'> ro*C</span>;<span
style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;开发多线程应用程序</span>;<span
lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;(注:本文来自</span>;<span lang=EN-US
style='font-family:Helvetica'> ro*C/C++ Precompiler Programmer's Guide Release
8.1.5</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;)</span>;<span lang=EN-US
style='font-family:Helvetica;color:#330099'>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal>;<span lang=EN-US style='font-family:Helvetica;color:#330099'>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;如果你的操作系统不支持线程,本文暂不适合你。本文包含以下几个部分:</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt;text-indent:-21.0pt;mso-list:l7 level1 lfo11;
tab-stops:list 42.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;什么是多线程?</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt;text-indent:-21.0pt;mso-list:l7 level1 lfo11;
tab-stops:list 42.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US> ro*C</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;中的运行时上下文</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt;text-indent:-21.0pt;mso-list:l7 level1 lfo11;
tab-stops:list 42.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;运行时上下文的使用模式</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt;text-indent:-21.0pt;mso-list:l7 level1 lfo11;
tab-stops:list 42.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;多线程应用程序的用户接口</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt;text-indent:-21.0pt;mso-list:l7 level1 lfo11;
tab-stops:list 42.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;多线程例子</span>;</p>;
<p class=MsoNormal>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l5 level1 lfo2;
tab-stops:list 21.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;一.</span>;<![endif]>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;什么是多线程?</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;一个多线程的应用程序中,线程运行在共享的地址空间里。线程是在进程内部执行的“轻量”级子进程,它们共享代码段和数据段,但是有自己的程序计数器、寄存器和堆栈。全局变量和静态变量在线程之间是共享的,因此通常需要在程序中使用某种互斥机制来管理线程对这些变量的访问,互斥体</span>;<span
lang=EN-US>;Mutexes</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;就是用来保证数据完整性的同步装置。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;有关互斥体的更多讨论,参看多线程编程方面的文章。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US> roc*C</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;编译器通过以下方式支持开发多线程的</span>;<span lang=EN-US>;Oracle</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;应用程序</span>;<span lang=EN-US>;(</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;在支持线程的平台上</span>;<span
lang=EN-US> </span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;:</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l4 level1 lfo12;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;用一个命令行编译选项来产生线程安全的代码</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l4 level1 lfo12;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;用内嵌的</span>;<span lang=EN-US>;SQL</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;语句和指令支持多线程</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l4 level1 lfo12;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;线程安全的</span>;<span lang=EN-US>;Lib</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;库和其他客户端</span>;<span lang=EN-US>;Lib</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;库</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;注意:也许你的平台支持某个特殊的线程包,但还是需要查看</span>;<span
lang=EN-US>;Oracle</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;有关平台的文档,看看</span>;<span lang=EN-US>;Oracle</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;是否支持它。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l5 level1 lfo2;
tab-stops:list 21.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;二.</span>;<![endif]>;<span
lang=EN-US> ro*C</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;中的运行时上下文</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;为了在线程和数据库连接之间建立松散的结合,</span>;<span
lang=EN-US> ro*C</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;引入了一个概念</span>;<span lang=EN-US>;runtime_context</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;,我们称之为运行时上下文。一个运行时上下文包含了以下资源和信息:</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l3 level2 lfo13;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;与数据库服务器的连接</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l3 level2 lfo13;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;当前连接上使用的游标</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l3 level2 lfo13;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;内嵌的一些选项,如</span>;<span lang=EN-US>;MODE</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;,</span>;<span lang=EN-US>;HOLD_CURSOR</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;,</span>;<span lang=EN-US>;RELEASE_CURSOR</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;和</span>;<span lang=EN-US>; SELECT_ERROR</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;不仅仅是简单的支持线程和连接之间的松散结合,</span>;<span
lang=EN-US> ro*C</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;编译器还允许开发人员在线程和运行时上下文之间建立松散的结合,</span>;<span
lang=EN-US> ro*C</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;允许在程序里为运行时上下文定义一个句柄,通过这个句柄,运行时上下文可以在线程之间切换。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;例如,一个交互式应用程序创建了线程</span>;<span
lang=EN-US>;T1</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;,来执行一个查询,并且返回了前</span>;<span
lang=EN-US>;10</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;条记录,然后</span>;<span lang=EN-US>;T1</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;终止。在用户输入了必须的数据之后,程序又创建了线程</span>;<span lang=EN-US>;T2</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;,并且把</span>;<span lang=EN-US>;T1</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;使用的运行时上下文传给</span>;<span
lang=EN-US>;T2</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;,这样</span>;<span lang=EN-US>;T2</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;可以在同一个游标上获取接下来</span>;<span lang=EN-US>;10</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;条的记录。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l5 level1 lfo2;
tab-stops:list 21.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;三.</span>;<![endif]>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;运行时上下文的使用模式</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;下面是在多线程的</span>;<span
lang=EN-US> ro*C</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;程序中使用运行时上下文的两种可能模式:</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l11 level2 lfo14;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;多线程共享单个运行时上下文</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l11 level2 lfo14;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;多线程使用互相独立的运行时上下文</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;不管采用哪种模式,不能在同一时刻多个线程共享同一个运行时上下文。如果两个或两个以上的线程在同一时刻试图使用同一个运行时上下文,将会出现以下错误:</span>;<span
lang=EN-US>;SQL-02131:<span style="mso-spacerun: yes">;& </span>;Runtime
context in use</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;1</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;.多线程共享单个运行时上下文</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;图(一)展示了一个运行在多线程环境中的应用程序,多个线程共享一个运行时上下文来执行</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句,运行时上下文不能在同一时刻被多个线程使用,图中的</span>;<span
lang=EN-US>;Mutex</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;展示了如何防止这种并行使用。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal align=center style='margin-left:21.0pt;text-align:center'>;<span
lang=EN-US>;<!--[if gte vml 1]>;<v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">;
<v:stroke joinstyle="miter"/>;
<v:formulas>;
<v:f eqn="if lineDrawn pixelLineWidth 0"/>;
<v:f eqn="sum @0 1 0"/>;
<v:f eqn="sum 0 0 @1"/>;
<v:f eqn="prod @2 1 2"/>;
<v:f eqn="prod @3 21600 pixelWidth"/>;
<v:f eqn="prod @3 21600 pixelHeight"/>;
<v:f eqn="sum @0 0 1"/>;
<v:f eqn="prod @6 1 2"/>;
<v:f eqn="prod @7 21600 pixelWidth"/>;
<v:f eqn="sum @8 21600 0"/>;
<v:f eqn="prod @7 21600 pixelHeight"/>;
<v:f eqn="sum @10 21600 0"/>;
</v:formulas>;
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>;
<o:lock v:ext="edit" aspectratio="t"/>;
</v:shapetype>;<v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:306pt;
height:342pt'>;
<v:imagedata src="./用Proc.files/image001.gif" o:title="threada1"/>;
</v:shape>;<![endif]-->;<![if !vml]>;<img width=408 height=456
src="./用Proc.files/image001.gif" v:shapes="_x0000_i1025">;<![endif]>;</span>;</p>;
<p class=MsoNormal align=center style='margin-left:21.0pt;text-align:center'>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;图(一)</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;2</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;.多线程使用互相独立的运行时上下文</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;图(二)展示了使用多个运行时上下文的多线程应用程序,在这种情况下,程序不需要使用互斥锁</span>;<span
lang=EN-US>;Mutex</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;,因为每个线程拥有一个独立的运行时上下文。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal align=center style='margin-left:21.0pt;text-align:center'>;<span
lang=EN-US>;<!--[if gte vml 1]>;<v:shape id="_x0000_i1026" type="#_x0000_t75"
style='width:306pt;height:425.25pt'>;
<v:imagedata src="./用Proc.files/image002.gif" o:title="threada2"/>;
</v:shape>;<![endif]-->;<![if !vml]>;<img width=408 height=567
src="./用Proc.files/image002.gif" v:shapes="_x0000_i1026">;<![endif]>;</span>;</p>;
<p class=MsoNormal align=center style='margin-left:21.0pt;text-align:center'>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;图(二)</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l5 level1 lfo2;
tab-stops:list 21.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;四.</span>;<![endif]>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;多线程应用程序的用户接口</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US> ro*C</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;编译器提供以下接口来支持多线程:</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo15;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;命令行选项,</span>;<span lang=EN-US>;THREADS=YES|NO</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo15;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;内嵌</span>;<span lang=EN-US>;SQL</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;语句和指令</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo15;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;线程安全的公共库函数</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;1</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;.</span>;<span lang=EN-US>;THREADS</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;选项</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;在</span>;<span
lang=EN-US>;proc</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;预编译命令行上指定</span>;<span lang=EN-US>;THREADS=YES</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;,</span>;<span lang=EN-US>;Pro*C</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;编译器将保证产生的</span>;<span
lang=EN-US>;C</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;代码是线程安全的。如果指定了</span>;<span lang=EN-US>;THREADS=YES</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;,</span>;<span lang=EN-US>;Pro*C</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;将会检查每个包含</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;执行语句的函数,是否指定了这些语句是在哪个运行时上下文中执行的,若没有发现这类指定标识,编译器就会返回错误。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;2</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;.内嵌</span>;<span lang=EN-US>;SQL</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;语句和指令</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;下列内嵌的</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句和指令用于支持多线程和运行时上下文的使用:</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL ENABLE THREADS</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;;</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL CONTEXT ALLOCATE :<em>;<span
style='font-style:normal'>;context_var</span>;</em>;</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;;</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL CONTEXT USE {:<em>;<span
style='font-style:normal'>;context_var/DEFAULT}</span>;</em>;</span>;<em>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman";font-style:normal'>;;</span>;</em>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<em>;<span lang=EN-US
style='font-family:Wingdings;font-style:normal'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;</em>;<![endif]>;<span lang=EN-US>;EXEC SQL CONTEXT FREE :<em>;<span
style='font-style:normal'>;context_var</span>;</em>;</span>;<em>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman";font-style:normal'>;;</span>;</em>;<em>;<span lang=EN-US
style='font-style:normal'>;<o:p>;</o:p>;</span>;</em>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;在以上</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句中,</span>;<em>;<span lang=EN-US
style='font-style:normal'>;context_var</span>;</em>;<em>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman";
font-style:normal'>;是运行时上下文句柄,它必须被定义成</span>;</em>;<em>;<span lang=EN-US
style='font-style:normal'>;sql_context</span>;</em>;<em>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman";
font-style:normal'>;类型:如</span>;</em>;<em>;<span lang=EN-US style='font-style:normal'>;sql_context
context_var</span>;</em>;<em>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman";font-style:normal'>;;</span>;</em>;<em>;<span
lang=EN-US style='font-style:normal'>;<o:p>;</o:p>;</span>;</em>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;使用</span>;<span
lang=EN-US>;DEFAULT</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;意味着接下来的</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句将使用默认的全局运行时上下文,直到另一条</span>;<span
lang=EN-US>;CONTEXT USE</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;语句覆盖它。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL ENABLE THREADS</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;这条可执行</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句初始化支持多线程的进程。它必须是程序中第一条可执行的</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL CONTEXT ALLOCATE</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;这条可执行</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句分配并初始化了一块用于指向一个新的运行时上下文的内存,并返回标识该上下文的句柄变量,该变量必须声明为</span>;<span
lang=EN-US>;sql_context</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;类型。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL CONTEXT USE</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;这条指令性语句告诉编译器接下去执行的</span>;<span
lang=EN-US>;SQL</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;语句将使用指定的运行时上下文,这里的运行时上下文必须在此前已经用</span>;<span
lang=EN-US>;CONTEXT ALLOCATE</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;分配并初始化。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;EXEC SQL CONTEXT FREE</span>;</p>;
<p class=MsoNormal style='margin-left:42.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;这条语句释放了运行时上下文句柄指定的内存,并把它设置空值。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;3</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;.编程时要考虑的问题</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;尽管</span>;<span
lang=EN-US>;Oracle</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;保证</span>;<span lang=EN-US>;SQL</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;库是线程安全的,但是你还是有责任保证你的</span>;<span lang=EN-US>;Pro*C</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;代码是为能在多线程下正确运行而设计的,例如,你必须考虑全局变量和静态变量的。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;另外,多线程要求对以下问题进行考虑:</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;把</span>;<span lang=EN-US>;sqlca</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;结构定义成线程安全的。典型的做法是在每个函数开始定义一个同名的局部变量。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span lang=EN-US>;sqlda</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;结构也和</span>;<span
lang=EN-US>;sqlca</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;结构一样处理。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;把程序里的宿主变量定义成线程安全的。也就是说要小心处理程序里的全局变量和静态变量。</span>;</p>;
<p class=MsoNormal style='margin-left:63.0pt;text-indent:-21.0pt;mso-list:l2 level2 lfo16;
tab-stops:list 63.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
Wingdings'>;n<span style='font:7.0pt "Times New Roman"'>;&&&&&&&&
</span>;</span>;<![endif]>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;避免同一时刻不同线程使用同一个运行时上下文。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:-21.0pt;mso-list:l5 level1 lfo2;
tab-stops:list 21.0pt'>;<![if !supportLists]>;<span lang=EN-US style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;五.</span>;<![endif]>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;多线程例子</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;下面的例子运行在</span>;<span
lang=EN-US>;Red Hat9</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;和</span>;<span
lang=EN-US>;Oracle9</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;上。程序目的是用两个线程同时往一个表里插</span>;<span
lang=EN-US>;10000</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;条记录,每个线程都拥有自己的运行时上下文。</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;#include&stdio.h&</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;#include&unistd.h&</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;#include&pthread.h&<span
style='mso-tab-count:1'>;&&&&& </span>;/* Linux</span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;线程库头文件</span>;<span lang=EN-US>; */</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;#include
&sqlca.h&<span style='mso-tab-count:2'>;&&&&&&&&& </span>;/*
Oracle</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;头文件</span>;<span lang=EN-US>; */</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;#define SQLCODE
sqlca.sqlcode</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;static int
insert_data( sql_context );</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;static int
start();</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;int</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;main()</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;{</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;pthread_t tid1, tid2;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style='mso-tab-count:1'>;&&&&&& </span>;/* </span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;创建两个线程</span>;<span lang=EN-US>; */</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;if( pthread_create(
&tid1,NULL,(void *)start,NULL ) ){</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;printf( &</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;创建线程失败</span>;<span
lang=EN-US>;!\n& );</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;exit(1);</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;}</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;if( pthread_create(
&tid2,NULL,(void *)start,NULL ) ){</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;printf( &</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;创建线程失败</span>;<span
lang=EN-US>;!\n& );</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;exit(1);</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:21.75pt'>;<span
lang=EN-US>;}</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:21.75pt'>;<span
lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:21.75pt'>;<span
lang=EN-US>;/* </span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;等待线程退出</span>;<span lang=EN-US>; */</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;if( pthread_join( tid1,NULL
) ){</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;printf( &</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;等待线程结束失败</span>;<span
lang=EN-US>;!\n& );</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;exit(1);</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;}</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;if( pthread_join( tid2,NULL
) ){</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;printf( &</span>;<span style='font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;等待线程结束失败</span>;<span
lang=EN-US>;!\n& );</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&&&&&&
</span>;exit(1);</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;}</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;exit(0);</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;}</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;int</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;start()</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;{</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;sql_context context;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;struct sqlca sqlca;<span
style='mso-tab-count:3'>;&&&&&&&&&&&&&&& </span>;/*
</span>;<span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;需要在此定义一个局部的</span>;<span lang=EN-US>;sqlca
*/</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;char uid[] = &dev/888888&;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<![if !supportEmptyParas]>;&<![endif]>;<o:p>;</o:p>;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style='mso-tab-count:1'>;&&&&&& </span>;/* </span>;<span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;以下</span>;<span lang=EN-US>;SQL</span>;<span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>;语句的执行顺序不能更改</span>;<span
lang=EN-US>; */</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;EXEC SQL ENABLE THREADS;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt'>;<span lang=EN-US>;<span
style="mso-spacerun: yes">;&&& </span>;EXEC SQL CONTEXT ALLOCATE
:context;</span>;</p>;
<p class=MsoNormal style='margin-left:21.0pt;text-indent:21.75pt'>;<span
lang=EN-US>;EXEC SQL CONTEXT USE :context;</span>;</p>;
<p class=MsoNormal style='margin-l |
|