1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
|
%!PS-Adobe-2.0
%%Creator: dvipsk 5.86 p1.5d Copyright 1996-2001 ASCII Corp.(www-ptex@ascii.co.jp)
%%based on dvipsk 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
%%Title: omnithread.dvi
%%Pages: 7
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%DocumentFonts: Palatino-Roman Palatino-Italic Palatino-Bold Courier
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips omnithread
%DVIPSParameters: dpi=600, compressed
%DVIPSSource: TeX output 2002.08.15:1756
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3
def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0
N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop
false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A
length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{
BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat
{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch
round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0
rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B
/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}
B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p
-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{
0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
%%EndProcSet
%%BeginProcSet: 8r.enc
% @@psencodingfile@{
% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
% version = "0.6",
% date = "1 July 1998",
% filename = "8r.enc",
% email = "tex-fonts@@tug.org",
% docstring = "Encoding for TrueType or Type 1 fonts
% to be used with TeX."
% @}
%
% Idea is to have all the characters normally included in Type 1 fonts
% available for typesetting. This is effectively the characters in Adobe
% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
%
% Character code assignments were made as follows:
%
% (1) the Windows ANSI characters are almost all in their Windows ANSI
% positions, because some Windows users cannot easily reencode the
% fonts, and it makes no difference on other systems. The only Windows
% ANSI characters not available are those that make no sense for
% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
% (173). quotesingle and grave are moved just because it's such an
% irritation not having them in TeX positions.
%
% (2) Remaining characters are assigned arbitrarily to the lower part
% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
%
% (3) Y&Y Lucida Bright includes some extra text characters; in the
% hopes that other PostScript fonts, perhaps created for public
% consumption, will include them, they are included starting at 0x12.
%
% (4) Remaining positions left undefined are for use in (hopefully)
% upward-compatible revisions, if someday more characters are generally
% available.
%
% (5) hyphen appears twice for compatibility with both
% ASCII and Windows.
%
/TeXBase1Encoding [
% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
/.notdef /dotaccent /fi /fl
/fraction /hungarumlaut /Lslash /lslash
/ogonek /ring /.notdef
/breve /minus /.notdef
% These are the only two remaining unencoded characters, so may as
% well include them.
/Zcaron /zcaron
% 0x10
/caron /dotlessi
% (unusual TeX characters available in, e.g., Lucida Bright)
/dotlessj /ff /ffi /ffl
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
% very contentious; it's so painful not having quoteleft and quoteright
% at 96 and 145 that we move the things normally found there to here.
/grave /quotesingle
% 0x20 (ASCII begins)
/space /exclam /quotedbl /numbersign
/dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
% 0x30
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
% 0x40
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
% 0x50
/P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
% 0x60
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
% 0x70
/p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde
/.notdef % rubout; ASCII ends
% 0x80
/.notdef /.notdef /quotesinglbase /florin
/quotedblbase /ellipsis /dagger /daggerdbl
/circumflex /perthousand /Scaron /guilsinglleft
/OE /.notdef /.notdef /.notdef
% 0x90
/.notdef /.notdef /.notdef /quotedblleft
/quotedblright /bullet /endash /emdash
/tilde /trademark /scaron /guilsinglright
/oe /.notdef /.notdef /Ydieresis
% 0xA0
/.notdef % nobreakspace
/exclamdown /cent /sterling
/currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft
/logicalnot
/hyphen % Y&Y (also at 45); Windows' softhyphen
/registered
/macron
% 0xD0
/degree /plusminus /twosuperior /threesuperior
/acute /mu /paragraph /periodcentered
/cedilla /onesuperior /ordmasculine /guillemotright
/onequarter /onehalf /threequarters /questiondown
% 0xC0
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
% 0xD0
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /germandbls
% 0xE0
/agrave /aacute /acircumflex /atilde
/adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis
/igrave /iacute /icircumflex /idieresis
% 0xF0
/eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex
/udieresis /yacute /thorn /ydieresis
] def
%%EndProcSet
%%BeginProcSet: texps.pro
%!
TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
exch def dict begin 0 1 255{exch dup type/integertype ne{pop pop 1 sub
dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
ifelse}for Metrics/Metrics currentdict end def[2 index currentdict end
definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
end
%%EndProcSet
TeXDict begin 39158280 55380996 1000 600 600 (omnithread.dvi)
@start /Fa 134[ 45 45 66 1[ 51 30 35 35 1[ 45 40 51 71
25 2[ 25 45 45 25 35 45 37 42 40 8[ 66 3[ 56 51 2[ 56
71 5[ 30 3[ 56 3[ 66 23[ 30 30 40[{ TeXBase1Encoding ReEncodeFont} 31
90.9091 /Palatino-Italic rf /Fb 134[ 51 1[ 76 1[ 56 30
40 35 2[ 51 56 81 30 2[ 30 56 51 35 45 56 40 56 45 14[ 66
2[ 76 5[ 35 6[ 61 19[ 23 30 23 4[ 25 39[{ TeXBase1Encoding ReEncodeFont}
27 90.9091 /Palatino-Bold rf /Fc 135[ 50 83 1[ 61 33
44 39 1[ 61 55 61 89 33 2[ 33 61 55 1[ 50 61 44 61 50
10[ 78 8[ 100 9[ 72 12[ 50 1[ 50 50 50 50 2[ 25 4[ 33
33 40[{ TeXBase1Encoding ReEncodeFont} 30 99.6264 /Palatino-Bold
rf /Fd 134[ 55 55 55 55 55 55 55 55 55 55 55 55 55 55
55 55 55 55 55 55 55 55 55 55 55 1[ 55 5[ 55 55 55 55
55 55 55 55 1[ 55 55 55 55 55 55 1[ 55 55 55 55 55 55
55 55 55 3[ 55 2[ 55 1[ 55 1[ 55 55 55 55 55 55 55 1[ 55
55 55 1[ 55 55 55 40[{ TeXBase1Encoding ReEncodeFont} 65
90.9091 /Courier rf /Fe 141[ 36 12[ 44 56 2[ 45 7[ 61
61 91 1[ 71 56 48 61 2[ 71 76 3[ 30 31 76 1[ 51 56 70
64 56 71 10[ 45 3[ 45 45 1[ 55 23 4[ 30 30 40[{
.167 SlantFont TeXBase1Encoding ReEncodeFont} 29 90.9091
/Palatino-Roman rf
%DVIPSBitmapFont: Ff cmsy10 10.95 1
/Ff 1 16 df<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0
AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D> 15
D E
%EndDVIPSBitmapFont
/Fg 104[ 91 2[ 45 45 24[ 45 51 47 76 51 55 30 39 36 51
55 50 53 80 26 51 21 26 53 51 30 44 56 40 50 45 3[ 30
1[ 30 2[ 61 91 66 71 56 48 61 1[ 55 71 76 86 56 66 30
31 76 1[ 51 56 70 64 56 71 6[ 23 45 45 45 45 45 45 45
45 45 45 55 23 30 23 55 1[ 30 30 25 4[ 34 30[ 55 55 2[{
TeXBase1Encoding ReEncodeFont} 75 90.9091 /Palatino-Roman
rf /Fh 134[ 66 60 100 1[ 73 40 53 47 1[ 73 66 73 106
2[ 40 40 73 66 47 60 73 53 73 60 11[ 93 80 73 86 1[ 73
100 100 120 3[ 47 18[ 60 60 60 60 60 60 1[ 35 1[ 40 45[{
TeXBase1Encoding ReEncodeFont} 38 119.552 /Palatino-Bold
rf /Fi 137[ 50 2[ 39 9[ 28 3[ 39 50 17[ 66 82[{
TeXBase1Encoding ReEncodeFont} 6 99.6264 /Palatino-Italic
rf /Fj 137[ 56 1[ 32 42 39 2[ 54 58 88 3[ 29 58 55 1[ 48
61 44 55 50 12[ 61 1[ 67 3[ 83 1[ 61 8[ 71 1[ 78 14[ 50
50 50 9[ 78 38[{ TeXBase1Encoding ReEncodeFont} 25 99.6264
/Palatino-Roman rf /Fk 139[ 47 61 57 2[ 78 83 4[ 42 83
2[ 69 88 64 79 72 12[ 88 4[ 113 119 136 3[ 48 7[ 112
65[{ TeXBase1Encoding ReEncodeFont} 18 143.462 /Palatino-Roman
rf end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: A4
%%EndSetup
%%Page: 1 1
1 0 bop Fk 728 918 a(The) 36 b(OMNI) g(Thr) m(ead) f(Abstracti) n(on) p
Fj 1293 1176 a(T) -9 b(ristan) 26 b(Richar) n(dson) 1022
1293 y(A) -7 b(T&T) 24 b(Laboratories) i(Cambridge) p
Fi 1192 1504 a(Revised) p Fj 24 w(November) f(2001) p
Fh 63 1961 a(1) 119 b(Introduction) p Fg 63 2183 a(The) 20
b(OMNI) h(thr) n(ead) g(abstraction) g(is) h(des) n(igned) f(to) f(pr) n
(ovide) h(a) h(common) f(set) f(of) h(thr) n(ead) g(oper) n(-) 63
2296 y(ations) h(for) g(use) g(in) h(pr) n(ograms) f(written) f(in) i
(C++.) 29 b(Pr) n(ograms) 22 b(written) g(using) f(the) h(abstraction)
63 2409 y(should) 30 b(be) g(much) i(easier) e(to) g(port) g(betwee) n
(n) h(dif) n(fer) n(ent) g(ar) n(chi) r(tectur) l(es) g(with) g(dif) n
(fer) n(ent) f(un-) 63 2522 y(derlying) 21 b(thr) n(eads) h
(primitives.) 204 2640 y(The) 17 b(pr) n(ogramming) h(interface) g(is) f
(designed) f(to) h(be) h(similar) h(to) e(the) g(C) i(language) e
(interface) 63 2753 y(to) k(POSIX) h(thr) n(eads) f(\(IEEE) g(draft) h
(standar) n(d) f(100) r(3.1c) i(\227) f(pr) n(eviously) g(1003) r(.4a,)
g(often) g(known) 63 2866 y(as) g(\223pthr) n(eads\224) h([POSIX94]\).)
204 2985 y(Much) 18 b(of) f(the) g(abstraction) i(consists) d(of) i
(simple) g(C++) g(object) g(wrappers) e(ar) n(ound) h(pthr) n(ead) 63
3098 y(calls.) 28 b(Howe) n(ver) 20 b(for) f(some) f(featur) n(es) g
(such) h(as) h(thr) n(ead-spe) n(ci\002c) h(data,) f(a) f(better) f
(interface) i(can) 63 3211 y(be) i(of) n(fer) n(ed) g(because) h(of) f
(the) g(use) g(of) g(C++.) 204 3329 y(Some) 28 b(of) h(the) f(mor) n(e)
h(complex) f(featur) n(es) g(of) h(pthr) n(eads) f(ar) n(e) h(not) f
(suppo) n(rted) g(because) h(of) 63 3442 y(the) e(dif) n(\002culty) i
(of) f(ensuring) g(the) f(same) h(featur) n(es) g(can) h(be) f(of) n
(fer) n(ed) g(on) g(top) g(of) g(other) f(thr) n(ead) 63
3555 y(sys) n(tems.) f(Such) 17 b(featur) n(es) g(include) h(thr) n
(ead) f(cancell) r(ation) g(and) h(complex) g(schedu) n(ling) h(contr) n
(ol) 63 3668 y(\(thoug) n(h) k(simple) g(thr) n(ead) f(priorities) g
(ar) n(e) h(supp) n(orted\).) 204 3787 y(The) i(abstraction) h(layer) h
(is) f(curr) n(ently) f(implemented) g(for) h(the) f(following) i(ar) n
(chitectur) n(es) 63 3900 y(/) 22 b(thr) n(ead) h(sys) n(tems:) p
Ff 199 4141 a(\017) p Fg 46 w(Solaris) g(2.x) g(using) f(pthr) n(eads) f
(draft) h(10) p Ff 199 4351 a(\017) p Fg 46 w(Solaris) h(2.x) g(using) f
(solaris) g(thr) n(eads) g(\(but) h(pthr) n(eads) e(version) h(is) h
(now) f(standar) n(d\)) p Ff 199 4561 a(\017) p Fg 46
w(Alpha) h(OSF1) g(using) f(pthr) n(eads) f(draft) i(4) p
Ff 199 4772 a(\017) p Fg 46 w(W) -5 b(indows) 21 b(NT) h(using) g(NT) g
(thr) n(eads) p Ff 199 4982 a(\017) p Fg 46 w(Linux) g(2.x) h(using) f
(Linuxthr) n(ead) g(0.5) h(\(which) h(is) e(based) g(on) h(pthr) n
(eads) e(draft) i(10\)) p Ff 199 5193 a(\017) p Fg 46
w(Linux) f(2.x) h(using) f(MIT) g(pthr) n(eads) f(\(which) j(is) f
(based) f(on) g(draft) h(8\)) p Ff 199 5403 a(\017) p
Fg 46 w(A) -7 b(TMos) 22 b(using) g(pthr) n(eads) f(draft) h(6) i
(\(but) e(not) g(V) -5 b(irata) 23 b(A) -7 b(TMos\)) 1684
5652 y(1) p 90 rotate dyy eop
%%Page: 2 2
2 1 bop Fg 221 249 a(2) p Fe 1797 w(2) 91 b(SYNCHRONI) n(SA) -7
b(TION) 22 b(OBJECTS) p Fg 362 548 a(See) h(the) p Fd
22 w(omni) n(thre) n(ad.h) p Fg 22 w(header) f(\002le) i(for) f(full) i
(det) n(ail) r(s) e(of) g(the) g(API.) f(The) h(des) n(criptions) 221
661 y(below) 35 b(assume) g(you) g(have) h(some) e(pr) n(evious) h
(knowled) n(ge) g(of) h(thr) n(eads) n(,) j(mutexes) n(,) g(condi-) 221
774 y(tion) f(varia) r(bles) g(and) g(semaphor) n(es) n(.) 75
b(Also) 38 b(r) n(efer) f(to) h(other) f(document) n(ation) i(\([Birr) n
(ell89) r(],) 221 887 y([POSIX94) q(]\)) 22 b(for) g(further) f
(explanation) i(of) f(thes) n(e) g(ideas) g(\(particularly) h
(condition) f(variab) r(les,) 221 1000 y(the) g(use) g(of) g(which) h
(may) g(not) f(be) h(particularly) h(intuitive) f(when) f(\002rst) f
(encounter) n(ed) n(\).) p Fh 221 1299 a(2) 119 b(Synchronisation) 31
b(objects) p Fg 221 1510 a(Synchr) n(onisation) 26 b(objects) h(ar) n
(e) g(used) e(to) h(synchr) n(onise) g(thr) n(eads) g(within) h(the) f
(same) h(pr) n(ocess) n(.) 221 1623 y(Ther) n(e) j(is) i(no) f(inter) n
(-pr) n(ocess) f(synchr) n(onisation) g(pr) n(ovided.) 53
b(The) 30 b(synchr) n(onisation) h(objects) 221 1735
y(pr) n(ovided) 22 b(ar) n(e) h(mutexes) n(,) g(condition) f(variab) r
(les) g(and) h(counting) f(semaphor) n(e) n(s.) p Fc
221 1991 a(2.1) 99 b(Mutex) p Fg 221 2168 a(An) 26 b(object) g(of) h
(typ) n(e) p Fd 26 w(omni) n(_mute) n(x) p Fg 26 w(is) g(use) n(d) f
(for) h(mutual) f(exclusion.) 39 b(It) 26 b(pr) n(ovides) f(two) g(op-)
221 2281 y(erations,) p Fd 37 w(lock\() n(\)) p Fg 35
w(and) p Fd 35 w(unloc) n(k\(\)) p Fg(.) 64 b(The) 35
b(alternative) h(names) p Fd 35 w(acq) n(uire\() n(\)) p
Fg 35 w(and) p Fd 35 w(re-) 221 2393 y(leas) n(e\(\)) p
Fg 19 w(can) 21 b(be) f(used) f(if) i(pr) n(eferr) n(ed) n(.) 27
b(Behaviour) 20 b(is) g(unde\002ne) n(d) g(when) f(a) i(thr) n(ead) f
(attempt) n(s) 221 2506 y(to) 30 b(lock) h(the) e(same) i(mutex) f
(again) h(or) f(when) g(a) h(mutex) f(is) h(locked) e(by) i(one) e(thr)
n(ead) h(and) h(un-) 221 2619 y(locked) 22 b(by) h(a) g(dif) n(fer) n
(ent) f(thr) n(ead.) p Fc 221 2874 a(2.2) 99 b(Condition) 26
b(V) -11 b(ariable) p Fg 221 3051 a(A) 28 b(condition) f(varia) r(ble) h
(is) g(r) n(epr) n(ese) n(nted) f(by) h(an) p Fd 28 w(omn) n(i_con) n
(diti) n(on) p Fg 27 w(and) g(is) g(used) e(for) i(sig-) 221
3164 y(nalli) r(ng) 20 b(betwee) n(n) g(thr) n(eads.) 26
b(A) 21 b(call) h(to) p Fd 19 w(wait\() n(\)) p Fg 20
w(causes) e(a) h(thr) n(ead) e(to) h(wait) h(on) f(the) f(condition) 221
3277 y(varia) r(ble.) 45 b(A) 28 b(call) i(to) p Fd 27
w(sign) n(al\(\)) p Fg 27 w(wakes) d(up) h(at) g(least) g(one) f(thr) n
(ead) h(if) h(any) f(ar) n(e) g(waiting.) 45 b(A) 221
3390 y(call) 25 b(to) p Fd 22 w(bro) n(adca) n(st\(\)) p
Fg 21 w(wakes) d(up) g(all) i(thr) n(eads) e(waiting) h(on) f(the) g
(condition) g(varia) r(ble.) 362 3503 y(When) 30 b(constr) o(ucte) n
(d,) i(a) e(pointer) f(to) h(an) p Fd 30 w(omni) n(_mute) n(x) p
Fg 30 w(must) f(be) h(given.) 50 b(A) 30 b(condition) 221
3616 y(varia) r(ble) p Fd 33 w(wait\() n(\)) p Fg 33
w(has) j(an) h(implic) r(it) f(mutex) p Fd 33 w(unlo) n(ck\(\)) p
Fg 32 w(and) p Fd 33 w(lock) n(\(\)) p Fg 33 w(ar) n(ound) g(it.) 60
b(The) 221 3729 y(link) 30 b(between) f(condition) g(varia) r(ble) h
(and) g(mutex) f(lasts) g(for) h(the) f(lifetime) i(of) e(the) g
(condition) 221 3842 y(varia) r(ble) c(\(unlike) h(pthr) n(eads) e
(wher) n(e) g(the) h(link) h(is) f(only) g(for) g(the) g(duration) f
(of) i(the) e(wait\).) 37 b(The) 221 3955 y(same) 23
b(mutex) f(may) h(be) f(used) f(with) i(several) f(condition) h(variab)
r(les.) 362 4068 y(A) c(wait) g(with) g(a) g(timeout) f(can) i(be) e
(achieved) h(by) g(call) r(ing) p Fd 19 w(tim) n(ed_w) n(ait\(\)) p
Fg -2 w(.) 27 b(This) 18 b(is) h(given) 221 4181 y(an) 27
b(absolute) e(time) h(to) f(wait) h(until.) 38 b(The) 26
b(r) n(outine) p Fd 25 w(omn) n(i_thr) n(ead:) n(:get_) n(time) n(\(\))
p Fg 25 w(can) h(be) 221 4293 y(used) 21 b(to) h(turn) g(a) h(r) n
(elativ) r(e) f(time) g(into) h(an) g(absolute) f(time.) p
Fd 28 w(tim) n(ed_wa) n(it\(\)) p Fg 21 w(r) n(eturns) p
Fd 21 w(true) p Fg 21 w(if) 221 4406 y(the) 27 b(condition) h(was) g
(signalled,) p Fd 29 w(false) p Fg 26 w(if) h(the) f(time) g(expir) n
(ed) f(befor) n(e) g(the) h(condition) f(vari) r(-) 221
4519 y(able) d(was) e(signalled.) p Fc 221 4774 a(2.3) 99
b(Counting) 26 b(semaphores) p Fg 221 4951 a(An) p Fd
21 w(omn) n(i_sem) n(apho) n(re) p Fg 20 w(is) 21 b(a) h(counting) e
(semaphor) n(e) n(.) 28 b(When) 20 b(cr) n(eated) g(it) h(is) g(given) g
(an) g(initial) 221 5064 y(unsigned) j(intege) n(r) i(value.) 36
b(When) p Fd 25 w(wai) n(t\(\)) p Fg 24 w(is) 26 b(called,) g(the) f
(value) h(is) f(decr) n(emente) n(d) g(if) h(non-) 221
5177 y(zer) n(o.) 43 b(If) 27 b(the) g(value) h(is) f(zer) n(o) h(then)
f(the) f(thr) n(ead) h(blocks) h(instead.) 41 b(When) p
Fd 27 w(post) n(\(\)) p Fg 27 w(is) 27 b(cal) r(led,) 221
5290 y(if) h(any) g(thr) n(eads) e(ar) n(e) i(blocked) f(in) p
Fd 27 w(wait\() n(\)) p Fg(,) h(exactly) f(one) g(thr) n(ead) g(is) g
(woken.) 41 b(If) 27 b(no) g(thr) n(eads) 221 5403 y(wer) n(e) 22
b(blocked) g(then) g(the) g(value) h(of) g(the) e(semaphor) n(e) h(is) h
(incr) n(emented.) p 90 rotate dyy eop
%%Page: 3 3
3 2 bop Fg 3306 249 a(3) 204 548 y(If) 27 b(a) h(thr) n(ead) e(cal) r
(ls) p Fd 27 w(try) n(_wait) n(\(\)) p Fg(,) h(then) g(the) f(thr) n
(ead) g(won't) h(block) h(if) f(the) g(semaphor) n(e's) 63
661 y(value) c(is) g(0,) g(r) n(eturning) p Fd 21 w(false) p
Fg 21 w(instead.) 204 777 y(Ther) n(e) f(is) g(no) h(way) f(of) h
(query) n(ing) g(the) f(value) h(of) g(the) f(semaphor) n(e) n(.) p
Fh 63 1095 a(3) 119 b(Thread) 29 b(object) p Fg 63 1313
a(A) 23 b(thr) n(ead) g(is) h(r) n(epr) n(ese) n(nted) e(by) i(an) p
Fd 24 w(omni) n(_thr) n(ead) p Fg 23 w(object.) 30 b(Ther) n(e) 23
b(ar) n(e) h(br) n(oadly) g(two) e(dif) n(fer) n(-) 63
1426 y(ent) f(ways) i(in) g(which) g(it) g(can) g(be) g(used) n(.) 204
1542 y(The) 28 b(\002rst) g(way) h(is) h(simply) f(to) f(cr) n(eate) h
(an) p Fd 30 w(omn) n(i_thr) n(ead) p Fg 28 w(object,) h(giving) g(a) f
(particula) r(r) 63 1655 y(function) c(which) h(the) e(thr) n(ead) h
(should) f(execute) n(.) 36 b(This) 25 b(is) g(like) g(the) g(POSIX) f
(\(or) i(any) f(other) n(\)) h(C) 63 1768 y(language) c(interface.) 204
1884 y(The) k(second) f(method) h(of) h(use) e(is) i(to) f(cr) n(eate) h
(a) g(new) g(class) g(which) g(inherits) f(fr) n(om) p
Fd 28 w(omn) n(i_) 63 1997 y(thr) n(ead) p Fg(.) 50 b(In) 31
b(this) f(case) g(the) g(thr) n(ead) g(will) i(execute) d(the) p
Fd 29 w(run\(\)) p Fg 29 w(member) h(function) h(of) f(the) 63
2109 y(new) 22 b(class.) 29 b(One) 23 b(advantage) g(of) g(this) g
(scheme) f(is) h(that) g(thr) n(ead-speci\002c) g(data) g(can) h(be) f
(imple-) 63 2222 y(mented) e(simply) h(by) h(having) g(data) g(members)
f(of) h(the) f(new) g(class.) 204 2339 y(When) f(constr) o(ucted) g(a) i
(thr) n(ead) f(is) g(in) h(the) e("new") h(state) f(and) h(has) g(not) g
(actuall) r(y) g(starte) n(d.) 28 b(A) 63 2451 y(call) j(to) p
Fd 29 w(sta) n(rt\(\)) p Fg 28 w(causes) e(the) g(thr) n(ead) g(to) g
(begin) g(executing.) 47 b(A) 29 b(static) h(member) f(function) p
Fd 63 2564 a(cre) n(ate\() n(\)) p Fg 32 w(is) j(pr) n(ovided) f(to) g
(constr) o(uct) g(and) g(start) g(a) i(thr) n(ead) e(in) h(a) g(single)
g(call.) 57 b(A) 31 b(thr) n(ead) 63 2677 y(exits) 21
b(by) i(call) r(ing) p Fd 22 w(exit\() n(\)) p Fg 22
w(or) g(by) f(r) n(eturning) g(fr) n(om) h(the) f(thr) n(ead) g
(function.) 204 2793 y(Thr) n(eads) 27 b(can) j(be) e(either) g
(detached) f(or) h(undetached) n(.) 46 b(Detached) 28
b(thr) n(eads) g(ar) n(e) h(thr) n(eads) 63 2906 y(for) h(which) i(all)
g(state) e(will) i(be) f(lost) f(upon) g(exit.) 52 b(Other) 30
b(thr) n(eads) g(cannot) h(dete) n(rmine) g(when) 63
3019 y(a) e(detached) f(thr) n(ead) h(will) h(disappear) -7
b(,) 31 b(and) e(ther) n(efor) n(e) f(should) g(not) h(attempt) f(to) g
(access) h(the) 63 3132 y(thr) n(ead) 23 b(object) g(unless) f(some) h
(explicit) h(synchr) n(onisation) f(with) g(the) g(detached) f(thr) n
(ead) h(guar) n(-) 63 3245 y(antees) e(that) h(it) h(still) g(exists.)
204 3361 y(Undet) n(ached) 33 b(thr) n(eads) f(ar) n(e) i(thr) n(eads) e
(for) h(which) g(storage) f(is) h(not) f(r) n(eclai) r(med) g(until) i
(an-) 63 3474 y(othe) n(r) g(thr) n(ead) g(waits) g(for) g(its) g
(termination) g(by) g(call) r(ing) p Fd 34 w(joi) n(n\(\)) p
Fg(.) 61 b(An) 34 b(exit) g(value) h(can) g(be) 63 3587
y(passe) n(d) 23 b(fr) n(om) g(an) g(undet) n(ached) g(thr) n(ead) f
(to) g(the) g(thr) n(ead) g(which) h(joins) g(it.) 204
3703 y(Detached) 31 b(/) h(undetached) e(thr) n(eads) h(ar) n(e) i
(distinguish) n(ed) f(on) f(cr) n(eation) h(by) g(the) f(type) g(of) 63
3816 y(function) 24 b(they) e(execute.) 30 b(Undetached) 22
b(thr) n(eads) h(execute) g(a) h(function) g(which) g(has) g(a) p
Fd 25 w(voi) n(d*) p Fg 63 3929 a(r) n(eturn) c(typ) n(e,) h(wher) n
(eas) f(detached) f(thr) n(eads) h(execute) f(a) j(function) f(which) g
(has) g(a) p Fd 21 w(void) p Fg 19 w(r) n(eturn) 63 4042
y(typ) n(e.) 52 b(Unfortunate) n(ly) 31 b(C++) g(member) g(functions) f
(ar) n(e) h(not) f(allowed) g(to) g(be) h(distingu) n(ished) 63
4155 y(simply) 26 b(by) h(their) f(r) n(eturn) g(type) n(.) 40
b(Thus) 26 b(in) h(the) f(case) h(of) g(a) g(derived) f(class) h(of) p
Fd 26 w(omni_) n(thre) n(ad) p Fg 63 4268 a(which) 20
b(needs) e(an) j(undet) n(ached) f(thr) n(ead,) g(the) f(member) h
(function) g(execute) n(d) g(by) g(the) f(thr) n(ead) g(is) 63
4380 y(called) p Fd 19 w(run_u) n(ndet) n(ache) n(d\(\)) p
Fg 18 w(rather) f(than) p Fd 19 w(run\() n(\)) p Fg(,) h(and) g(it) g
(is) g(started) e(by) i(calli) r(ng) p Fd 18 w(star) n(t_) 63
4493 y(und) n(etac) n(hed\(\)) p Fg 21 w(instead) j(of) p
Fd 22 w(start) n(\(\)) p Fg(.) 204 4610 y(The) i(abstraction) i(curr) n
(ently) e(suppo) n(rts) h(thr) n(ee) f(priorities) g(of) h(thr) n(ead,)
g(but) g(no) g(guarantee) 63 4722 y(is) 33 b(made) g(of) h(how) f(this)
g(will) h(af) n(f) r(ect) f(underlying) f(thr) n(ead) h(scheduling.) 59
b(The) 33 b(thr) n(ee) f(priori-) 63 4835 y(ties) 18
b(ar) n(e) p Fd 20 w(PRIO) n(RITY) n(_LOW) p Fg(,) p
Fd 18 w(PRIO) n(RITY) n(_NOR) n(MAL) p Fg 19 w(and) p
Fd 19 w(PRIO) n(RITY) n(_HIG) n(H) p Fg(.) h(By) g(default) g(all) 63
4948 y(thr) n(eads) i(r) o(un) i(at) p Fd 23 w(PRIO) n(RITY) n(_NORM) n
(AL) p Fg(.) f(A) g(dif) n(fer) n(ent) h(priority) f(can) i(be) e
(speci\002ed) g(on) g(thr) n(ead) 63 5061 y(cr) n(eation,) h(or) f
(while) h(the) f(thr) n(ead) g(is) h(r) o(unning) g(using) p
Fd 22 w(set_) n(prio) n(rity\() n(\).) p Fg 28 w(A) g(thr) n(ead's) f
(cur) n(-) 63 5174 y(r) n(ent) g(priority) g(is) g(r) n(eturned) f(by) p
Fd 23 w(pri) n(ority) n(\(\)) p Fg(.) 204 5290 y(Other) d(functions) g
(pr) n(ovided) g(ar) n(e) p Fd 19 w(sel) n(f\(\)) p Fg
18 w(which) h(r) n(eturns) e(the) h(calli) r(ng) g(thr) n(ead's) p
Fd 18 w(omn) n(i_) 63 5403 y(thr) n(ead) p Fg 36 w(object,) p
Fd 40 w(yie) n(ld\(\)) p Fg 35 w(which) 38 b(r) n(eques) n(ts) e(that) h
(other) e(thr) n(eads) h(be) h(allowed) g(to) f(r) o(un,) p
90 rotate dyy eop
%%Page: 4 4
4 3 bop Fg 221 249 a(4) p Fe 1367 w(6) 91 b(THRE) n(ADED) 23
b(I/O) g(SHUTDOWN) f(FOR) g(UNIX) p Fd 221 548 a(id\(\)) p
Fg 27 w(which) 29 b(r) n(eturns) e(an) i(intege) n(r) g(id) f(for) h
(the) e(thr) n(ead) h(for) g(use) g(in) h(debug) n(ging,) p
Fd 29 w(state) n(\(\)) p Fg(,) p Fd 221 661 a(slee) n(p\(\)) p
Fg 22 w(and) p Fd 22 w(get_t) n(ime\() n(\)) p Fg(.) p
Fh 221 953 a(4) 119 b(Per) n(-threa) n(d) 30 b(data) p
Fg 221 1164 a(omnithr) n(ead) 22 b(suppo) n(rts) g(per) n(-thr) n(ead) f
(data,) h(via) i(member) e(functions) f(of) i(the) p
Fd 21 w(omni) n(_thr) n(ead) p Fg 221 1277 a(object.) 362
1390 y(First,) d(you) g(must) h(allocate) h(a) f(key) f(for) g(with) h
(the) p Fd 20 w(omni) n(_thre) n(ad::) n(allo) n(cate_) n(key\() n(\)) p
Fg 221 1502 a(function.) 28 b(Then,) 21 b(any) h(object) g(whose) f
(class) h(is) g(derived) f(fr) n(om) p Fd 23 w(omni) n(_thr) n(ead::) n
(valu) n(e_t) p Fg 221 1615 a(can) 27 b(be) f(stor) n(e) n(d) g(using) f
(the) p Fd 26 w(set) n(_val) n(ue\(\)) p Fg 25 w(function.) 38
b(V) -8 b(alues) 25 b(ar) n(e) h(r) n(etrieved) f(or) h(r) n(emoved) 221
1728 y(with) p Fd 23 w(get) n(_valu) n(e\(\)) p Fg 21
w(and) p Fd 23 w(remo) n(ve_v) n(alue\() n(\)) p Fg 22
w(r) n(espectively) -10 b(.) 362 1841 y(When) 23 b(the) g(thr) n(ead) g
(exits,) g(all) i(per) n(-thr) n(ead) e(data) h(is) g(delet) n(ed) f
(\(hence) h(the) e(base) i(class) g(with) 221 1954 y(virtual) g(dest) n
(r) o(uctor\).) 362 2067 y(Note) 17 b(that) i(the) f(per) n(-thr) n
(ead) f(data) i(functions) f(ar) n(e) p Fb 19 w(not) p
Fg 18 w(thr) n(ead) g(safe,) i(so) d(although) i(you) e(can) 221
2180 y(access) 29 b(one) e(thr) n(ead's) h(storage) f(fr) n(om) i
(another) f(thr) n(ead,) h(ther) n(e) e(is) i(no) f(concurr) n(ency) g
(contr) n(ol.) 221 2293 y(Unless) j(you) g(r) n(eall) r(y) h(know) f
(what) h(you) f(ar) n(e) i(doing,) g(it) g(is) f(best) f(to) h(only) g
(access) g(per) n(-thr) n(ead) 221 2406 y(data) 23 b(fr) n(om) g(the) f
(thr) n(ead) g(it) h(is) g(attached) f(to.) p Fh 221
2698 a(5) 119 b(Using) 31 b(OMNI) d(threads) h(in) h(your) g(program) p
Fg 221 2909 a(Obvi) r(ously) 16 b(you) h(need) g(to) g(include) h(the) p
Fd 16 w(omnit) n(hrea) n(d.h) p Fg 17 w(header) e(\002le) i(in) g(your)
f(sour) n(ce) g(code,) 221 3021 y(and) 25 b(link) g(in) h(the) e
(omnithr) n(ead) g(libra) r(ry) g(with) h(your) f(execut) n(abl) r(e.)
34 b(Because) 23 b(ther) n(e) h(is) h(a) g(single) p
Fd 221 3134 a(omni) n(threa) n(d.h) p Fg 30 w(for) 32
b(all) h(platforms,) h(certain) e(pr) n(epr) n(oces) n(sor) f
(de\002nes) f(must) h(be) g(given) h(as) 221 3247 y(compiler) 25
b(options) n(.) 33 b(The) 23 b(easiest) g(way) h(to) g(do) f(this) h
(is) g(to) g(stud) n(y) g(the) g(make\002les) f(given) h(in) h(the) 221
3360 y(examples) i(pr) n(ovided) g(with) g(this) g(distribution.) 42
b(If) 27 b(you) g(ar) n(e) g(to) g(include) h(OMNI) f(thr) n(eads) g
(in) 221 3473 y(your) 18 b(own) g(development) g(envir) n(onment,) h
(thes) n(e) g(ar) n(e) g(the) f(necessary) g(pr) n(epr) n(oce) n(ssor) g
(de\002nes) n(:) p 362 3567 3287 4 v 360 3680 4 113 v
412 3646 a(Platform) p 1312 3680 V 599 w(Pr) n(epr) n(ocess) n(or) 23
b(De\002nes) p 3648 3680 V 362 3683 3287 4 v 362 3700
V 360 3813 4 113 v 412 3779 a(Sun) f(Solaris) h(2.x) p
1312 3813 V Fd 365 w(-D__) n(suno) n(s__) 54 b(-D_) n(_spa) n(rc__) f
(-D__) n(OSVER) n(SION) n(__=5) p 3648 3813 V 360 3926
V 1312 3926 V 1363 3892 a(-DSV) n(R4) h(-DUs) n(ePth) n(read) f(-D_R) n
(EENT) n(RANT) p 3648 3926 V 362 3929 3287 4 v 360 4042
4 113 v Fg 412 4008 a(x86) 24 b(Linux) e(2.0) p 1312
4042 V Fd 418 w(-D__) n(linu) n(x__) 54 b(-D_) n(_i86) n(__) g(-D__) n
(OSVE) n(RSION) n(__=2) p 3648 4042 V 360 4155 V Fg 412
4121 a(with) 23 b(linuxthr) n(eads) f(0.5) p 1312 4155
V Fd 100 w(-D_R) n(EENT) n(RANT) p 3648 4155 V 362 4158
3287 4 v 360 4271 4 113 v Fg 412 4237 a(Digital) i(Unix) f(3.2) p
1312 4271 V Fd 320 w(-D__) n(osf1) n(__) 54 b(-D__) n(alph) n(a__) g
(-D_) n(_OSV) n(ERSIO) n(N__=) n(3) p 3648 4271 V 360
4384 V 1312 4384 V 1363 4350 a(-D_R) n(EENT) n(RANT) p
3648 4384 V 362 4387 3287 4 v 360 4500 4 113 v Fg 412
4466 a(W) -5 b(indows) 22 b(NT) p 1312 4500 V Fd 411
w(-D__) n(NT__) 53 b(-MD) p 3648 4500 V 362 4503 3287
4 v Fh 221 4740 a(6) 119 b(Threaded) 29 b(I/O) g(shutdown) h(for) g
(Unix) p Fg 221 4951 a(or) -7 b(,) 20 b(how) e(one) g(thr) n(ead) h
(shou) n(ld) h(tell) f(another) f(thr) n(ead) g(to) h(shut) f(down) g
(when) g(it) h(might) g(be) g(doing) 221 5064 y(a) k(blocking) g(cal) r
(l) g(on) f(a) h(socket) n(.) p Fb 362 5177 a(If) h(you) e(are) i
(using) e(omniOR) n(B,) h(you) e(don') n(t) i(need) g(to) g(worry) f
(about) g(all) i(this,) f(since) h(om-) 221 5290 y(niORB) i(does) h(it)
h(for) f(you) n(.) p Fg 41 w(This) g(section) f(is) h(only) g(r) n
(elevant) g(if) h(you) e(ar) n(e) h(using) f(omnithr) n(ead) 221
5403 y(in) d(your) f(own) g(socket) n(-based) h(pr) n(ogramming.) k(It)
22 b(is) h(also) g(serious) n(ly) g(out) f(of) h(date.) p
90 rotate dyy eop
%%Page: 5 5
5 4 bop Fe 63 249 a(6.1) 91 b(r) n(ead\(\)) p Fg 2800
w(5) 204 548 y(Unfortunate) n(ly) 35 b(ther) n(e) e(doe) n(sn't) h
(seem) f(to) h(be) g(a) h(standar) n(d) e(way) i(of) f(doing) f(this) h
(which) 63 661 y(works) 19 b(acr) n(oss) i(all) i(Unix) e(syst) n(ems.)
27 b(I) 21 b(have) g(investigated) f(the) h(behaviour) g(of) g(Solaris)
h(2.5) g(and) 63 774 y(Digital) k(Unix) g(3.2.) 36 b(On) 26
b(Digital) h(Unix) e(everyth) n(ing) h(is) f(\002ne,) g(as) h(the) e
(obvious) h(method) f(using) 63 887 y(shutd) n(own\(\)) 32
b(seems) f(to) h(work) f(OK.) h(Unfortunately) f(on) h(Solaris) h(shut)
n(down) f(can) h(only) f(be) 63 1000 y(used) 25 b(on) h(a) h(connected)
e(socke) n(t,) i(so) f(we) g(need) f(devious) h(means) g(to) g(get) f
(ar) n(ound) h(this) g(lim) r(ita-) 63 1112 y(tion.) h(The) 22
b(details) g(ar) n(e) h(summarised) g(below:) p Fc 63
1429 a(6.1) 99 b(read\(\)) p Fg 63 1627 a(Thr) n(ead) 28
b(A) h(is) g(in) h(a) g(loop,) g(doing) p Fd 28 w(rea) n(d\(soc) n(k\))
p Fg(,) g(pr) n(ocess) n(ing) f(the) g(data,) h(then) f(going) f(back)
63 1739 y(into) 22 b(the) g(r) n(ead.) 204 1862 y(Thr) n(ead) 30
b(B) h(comes) f(along) h(and) g(wants) f(to) g(shut) g(it) h(down) f
(\227) h(it) g(can't) g(cancel) h(thr) n(ead) f(A) 63
1975 y(since) 21 b(\(i\)) h(working) e(out) g(how) g(to) h(clean) h(up)
e(accor) n(ding) i(to) e(wher) n(e) g(A) h(is) g(in) h(its) f(loop) f
(is) h(a) h(night-) 63 2088 y(mar) n(e,) h(and) f(\(ii\)) i(this) f
(isn't) f(ava) r(ilabl) r(e) g(in) h(omnithr) n(ead) f(anyway) -10
b(.) 204 2211 y(On) 23 b(Solaris) g(2.5) g(and) g(Digital) h(Unix) f
(3.2) g(the) f(following) h(strate) n(gy) f(works:) 204
2334 y(Thr) n(ead) g(B) g(does) p Fd 21 w(shut) n(down\() n(sock) n
(,2\)) p Fg(.) 204 2457 y(At) g(this) g(point) h(thr) n(ead) f(A) g(is)
h(either) f(blocked) g(inside) p Fd 23 w(rea) n(d\(so) n(ck\)) p
Fg(,) g(or) g(is) h(elsewhe) n(r) n(e) g(in) 63 2570
y(the) 18 b(loop.) 26 b(If) 18 b(the) g(former) h(then) f(r) n(ead) h
(will) h(r) n(eturn) e(0,) i(indicating) f(that) g(the) f(socke) n(t) h
(is) g(closed.) 26 b(If) 63 2683 y(the) 21 b(latter) h(then) f
(eventually) h(thr) n(ead) g(A) g(will) i(call) p Fd
24 w(rea) n(d\(so) n(ck\)) p Fg 21 w(and) f(then) e(this) h(will) h(r) n
(eturn) 63 2796 y(0.) 28 b(Thr) n(ead) 22 b(A) h(should) p
Fd 21 w(clos) n(e\(soc) n(k\)) p Fg(,) f(do) g(any) g(other) g(tidying)
f(up,) h(and) h(exit.) 204 2919 y(If) 34 b(ther) n(e) g(is) h(another) f
(point) g(in) h(the) e(loop) i(that) f(thr) n(ead) g(A) h(can) g(block)
g(then) f(obviously) 63 3032 y(thr) n(ead) 19 b(B) h(needs) f(to) h(be)
g(awar) n(e) h(of) f(this) g(and) g(be) h(able) g(to) e(wake) h(it) h
(up) f(in) g(the) g(appr) n(opriate) g(way) 63 3145 y(fr) n(om) j(that)
f(point.) p Fc 63 3462 a(6.2) 99 b(accept\(\)) p Fg 63
3659 a(Again) 25 b(thr) n(ead) g(A) h(is) f(in) h(a) g(loop,) g(this) f
(time) h(doing) e(an) i(acc) r(ept) e(on) h(listenSock,) g(dealing) h
(with) 63 3772 y(a) d(new) f(connection) g(and) h(going) e(back) j
(into) e(accept.) 28 b(Thr) n(ead) 22 b(B) g(wants) h(to) f(cancel) h
(it.) 204 3895 y(On) g(Digital) h(Unix) f(3.2) g(the) f(strateg) n(y) g
(is) h(identical) h(to) e(that) g(for) h(r) n(ead:) 204
4018 y(Thr) n(ead) 39 b(B) g(does) p Fd 38 w(shut) n(down) n(\(list) n
(enSo) n(ck,2) n(\)) p Fg(.) 79 b(Wher) n(ever) 38 b(thr) n(ead) h(A) h
(is) f(in) h(the) 63 4131 y(loop,) i(eventually) c(it) h(will) h(r) n
(eturn) p Fd 38 w(ECONN) n(ABOR) n(TED) p Fg 38 w(fr) n(om) f(the) f
(accept) h(call) r(.) 76 b(It) 39 b(shou) n(ld) p Fd
63 4244 a(clo) n(se\(l) n(isten) n(Sock) n(\)) p Fg(,) 22
b(tidy) g(up) g(as) h(necessary) e(and) i(exit.) 204
4367 y(On) 30 b(Solaris) f(2.5) i(thr) n(ead) e(B) g(can't) h(do) p
Fd 29 w(shu) n(tdow) n(n\(lis) n(tenS) n(ock,2) n(\)) p
Fg 29 w(\227) g(this) f(r) n(eturns) p Fd 63 4480 a(ENO) n(TCON) n(N) p
Fg(.) 22 b(Instead) f(the) h(following) h(strateg) n(y) g(can) g(be) g
(used) n(:) 204 4603 y(First) 35 b(thr) n(ead) h(B) g(set) n(s) g(some)
f(sort) g(of) h("shutdo) n(wn) g(\003ag") g(associated) g(with) g
(listenSock.) 63 4716 y(Then) 31 b(it) h(does) p Fd 30
w(gets) n(ocka) n(ddr\(l) n(iste) n(nSock) n(\)) p Fg
32 w(to) f(\002nd) g(out) g(which) i(port) e(listenSock) f(is) 63
4828 y(on) 18 b(\(or) h(knows) e(alr) n(eady\),) j(sets) d(up) h(a) h
(socket) e(dummySock,) i(doe) n(s) p Fd 19 w(con) n(nect) n(\(dumm) n
(ySoc) n(k,) 63 4941 y(thi) n(s) 54 b(host,) f(por) n(t\)) p
Fg 22 w(and) 23 b(\002nally) g(does) p Fd 21 w(clos) n(e\(dum) n(mySo) n
(ck\)) p Fg(.) 204 5064 y(Wher) n(ever) 16 b(thr) n(ead) h(A) g(is) g
(in) h(the) e(loop,) h(eventually) g(it) h(will) g(call) p
Fd 19 w(acce) n(pt\(li) n(sten) n(Sock) n(\)) p Fg(.) 63
5177 y(This) 35 b(will) j(r) n(eturn) d(successfully) g(with) h(a) h
(new) e(socket,) j(say) e(connSock.) 67 b(Thr) n(ead) 36
b(A) f(then) 63 5290 y(checks) 20 b(to) h(see) f(if) i(the) f("shutd) n
(own) g(\003ag") h(is) f(set.) 26 b(If) c(not,) e(then) h(it's) g(a) h
(normal) g(connection.) 27 b(If) 21 b(it) 63 5403 y(is) h(set,) g(then)
f(thr) n(ead) h(A) h(closes) f(listenSock) f(and) i(connSock,) e
(tidies) h(up) g(and) h(exits.) p 90 rotate dyy eop
%%Page: 6 6
6 5 bop Fg 221 249 a(6) p Fe 1367 w(6) 91 b(THRE) n(ADED) 23
b(I/O) g(SHUTDOWN) f(FOR) g(UNIX) p Fc 221 548 a(6.3) 99
b(write\(\)) p Fg 221 768 a(Thr) n(ead) 19 b(A) f(may) h(be) g(blocked)
f(in) i(write,) f(or) f(about) h(to) f(go) g(in) h(to) g(a) g(poten) n
(tiall) r(y-blocking) g(write.) 221 881 y(Thr) n(ead) j(B) h(wants) f
(to) g(shut) f(it) i(down.) 362 1016 y(On) g(Solaris) g(2.5:) 362
1150 y(Thr) n(ead) f(B) h(doe) n(s) p Fd 23 w(shu) n(tdown) n(\(soc) n
(k,2\)) p Fg -2 w(.) 362 1285 y(If) c(thr) n(ead) f(A) h(is) g(alr) n
(eady) g(in) p Fd 20 w(wri) n(te\(s) n(ock\)) p Fg 17
w(then) f(it) h(will) i(r) n(eturn) d(with) p Fd 18 w(ENXIO) p
Fg -2 w(.) h(If) g(thr) n(ead) 221 1398 y(A) k(calls) h(write) e(after)
g(thr) n(ead) g(B) h(calls) h(shut) n(down) e(this) g(will) i(r) n
(eturn) p Fd 22 w(EIO) p Fg(.) 362 1532 y(On) f(Digital) h(Unix) f
(3.2:) 362 1666 y(Thr) n(ead) f(B) h(doe) n(s) p Fd 23
w(shu) n(tdown) n(\(soc) n(k,2\)) p Fg -2 w(.) 362 1801
y(If) h(thr) n(ead) f(A) g(is) h(alr) n(eady) g(in) p
Fd 24 w(writ) n(e\(so) n(ck\)) p Fg 23 w(then) e(it) i(will) h(r) n
(eturn) e(the) f(number) i(of) f(bytes) 221 1914 y(written) 31
b(befor) n(e) h(it) g(became) g(blocked.) 55 b(A) 32
b(subseq) n(uent) f(cal) r(l) h(to) f(write) h(will) h(then) e(gene) n
(rate) p Fd 221 2027 a(SIGP) n(IPE) p Fg 22 w(\(or) p
Fd 22 w(EPIP) n(E) p Fg 23 w(will) 24 b(be) e(r) n(eturned) f(if) p
Fd 24 w(SIG) n(PIPE) p Fg 21 w(is) i(ignor) n(ed) e(by) i(the) f(thr) n
(ead\).) p Fc 221 2413 a(6.4) 99 b(connect\(\)) p Fg
221 2634 a(Thr) n(ead) 30 b(A) f(may) h(be) g(blocked) f(in) i
(connect,) g(or) e(about) h(to) f(go) g(in) i(to) e(a) h(poten) n
(tiall) r(y-blocking) 221 2747 y(connect.) d(Thr) n(ead) c(B) f(wants) g
(to) g(shut) g(it) g(down.) 362 2881 y(On) h(Digital) h(Unix) f(3.2:)
362 3016 y(Thr) n(ead) f(B) h(doe) n(s) p Fd 23 w(shu) n(tdown) n
(\(soc) n(k,2\)) p Fg -2 w(.) 362 3150 y(If) j(thr) n(ead) f(A) g(is) h
(alr) n(eady) g(in) p Fd 26 w(conn) n(ect\() n(sock) n(\)) p
Fg 26 w(then) e(it) i(will) h(r) n(eturn) e(a) h(successful) f(con-) 221
3263 y(nection.) 54 b(Subsequ) n(ent) 31 b(r) n(eading) g(or) g
(writing) g(will) i(show) d(that) i(the) e(socket) g(has) h(been) g
(shut) 221 3376 y(down) 22 b(\(i.e.) 28 b(r) n(ead) 23
b(r) n(eturns) e(0,) i(write) f(generate) n(s) p Fd 23
w(SIG) n(PIPE) p Fg 21 w(or) g(r) n(eturns) p Fd 22 w(EPI) n(PE) p
Fg(\).) g(If) h(thr) n(ead) f(A) 221 3489 y(call) r(s) g(connect) g
(after) h(thr) n(ead) f(B) g(call) r(s) g(shutdo) n(wn) h(this) f(will)
i(r) n(eturn) p Fd 22 w(EIN) n(VAL) p Fg(.) 362 3623
y(On) f(Solaris) g(2.5:) 362 3758 y(Ther) n(e) 35 b(is) h(no) f(way) g
(to) g(wake) g(up) g(a) h(thr) n(ead) f(which) h(is) g(blocked) f(in) h
(connect.) 66 b(Inst) n(ead) 221 3871 y(Solaris) 33 b(for) n(ces) g(us)
f(thr) n(ough) g(a) i(ridiculous) f(pr) n(oced) n(ur) n(e) g(whichever)
g(way) g(we) f(try) g(it.) 59 b(One) 221 3984 y(way) 23
b(is) f(this:) 362 4118 y(First) d(thr) n(ead) h(A) g(cr) n(eates) f(a)
h(pipe) g(in) g(addition) g(to) f(the) g(socket) n(.) 27
b(Instead) 19 b(of) h(shut) n(ting) g(down) 221 4231
y(the) i(socket) n(,) h(thr) n(ead) f(B) g(simply) h(writes) e(a) i
(byte) f(to) g(the) g(pipe.) 362 4365 y(Thr) n(ead) 17
b(A) g(meanwhile) h(set) n(s) f(the) g(socke) n(t) g(to) g
(non-blocking) g(mode) f(using) p Fd 17 w(fcn) n(tl\(s) n(ock,) 221
4478 y(F_SE) n(TFL,) 53 b(O_NO) n(NBLO) n(CK\)) p Fg(.) 26
b(Then) h(it) g(cal) r(ls) g(connect) g(on) g(the) f(socket) g(\227) h
(this) g(will) i(r) n(eturn) p Fd 221 4591 a(EINP) n(ROGRE) n(SS) p
Fg(.) k(Then) h(it) h(must) e(cal) r(l) p Fd 35 w(sel) n(ect\() n(\)) p
Fg(,) k(waiting) e(for) f(either) g(sock) g(to) f(become) 221
4704 y(writable) 39 b(or) f(for) h(the) e(pipe) h(to) g(become) g(r) n
(eadable.) 75 b(If) 39 b(select) e(r) n(eturns) g(that) i(just) e(sock)
h(is) 221 4817 y(writable) 30 b(then) f(the) g(connection) g(has) h
(succeede) n(d.) 49 b(It) 29 b(then) g(need) n(s) h(to) f(set) f(the) h
(socket) f(back) 221 4930 y(to) i(blocking) h(mode) f(using) p
Fd 30 w(fcnt) n(l\(so) n(ck,) 54 b(F_S) n(ETFL) n(,) h(0\)) p
Fg(.) c(If) 31 b(instead) e(select) h(r) n(eturns) 221
5043 y(that) 23 b(the) e(pipe) h(is) h(r) n(eadable,) g(thr) n(ead) f
(A) h(closes) e(the) h(socket) n(,) h(tidies) f(up) g(and) h(exits.) 362
5177 y(An) g(alternative) h(method) e(is) i(similar) h(but) e(to) g
(use) f(polling) i(instead) e(of) i(the) e(pipe.) 29
b(Thr) n(ead) 221 5290 y(B) 24 b(justs) e(sets) g(a) j(\003ag) f(and) g
(thr) n(ead) f(A) h(calls) h(select) e(with) g(a) i(timeout,) e(period)
n(ica) r(lly) h(waking) f(up) 221 5403 y(to) f(see) g(if) h(the) f
(\003ag) h(has) f(been) g(set.) p 90 rotate dyy eop
%%Page: 7 7
7 6 bop Fe 63 249 a(REF) n(ERENCES) p Fg 2660 w(7) p
Fh 63 548 a(Refere) n(nces) p Fg 63 759 a([POSIX94]) p
Fa 46 w(Portable) 29 b(Operat) r(ing) f(System) g(Interface) h
(\(POSIX\)) e(Thr) n(ea) r(ds) h(Extension) p Fg(,) h(P1003) r(.1c) 245
872 y(Draft) 23 b(10,) g(IEEE,) e(Septe) n(mber) i(1994) r(.) 63
1059 y([Birr) n(ell89]) p Fa 47 w(An) 28 b(Intr) n(od) r(uction) g(to) h
(Pr) n(ogr) r(amming) g(with) g(Thr) n(ead) r(s) p Fg(,) h(Rese) n(ar) n
(ch) g(Repo) n(rt) e(35,) j(DEC) 245 1172 y(Syst) n(ems) 22
b(Resear) n(ch) g(Center) -7 b(,) 22 b(Palo) h(Alto,) f(CA,) h(January)
g(1989) r(.) p 90 rotate dyy eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF
|