I have attached some alpha code testing the following functions…
SDL_CreateCond()
SDL_DestroyCond()
SDL_WaitCond()
SDL_condSignalOne()
SDL_condSignalAll()
…I have only tested on Linux and need some testing on other platforms.
For POSIX threads-enabled systems we can use the POSIX threads conditional
variables themselves.
Now, it turns out that if my design works as I think it does we can use
mutexes easily on systems that don’t support conditionals naturally.
Here’s the basic design for non-POSIX-enabled systems…
SDL_CreateCond()
Create and lock a mutex.
SDL_WaitCond()
Increment the reference count and attempt to lock mutex.
When signaled decrement the reference count.
SDL_condSignalOne()
Unlock mutex.
SDL_condSignalAll()
Unlock mutex "reference count" times.
Thoughts on this design?
Paul Braman
@Paul_Braman
-------------- next part --------------
begin 660 cond.tar.gz
M’XL(“HM+C@"
V-O;F0N=&%R.U:6V_;-A3.J_4K3AUT5=PXL2S)!NJV6-$$ MV[!D[9JTV[
-2W3ME!9,B0Z;3KTOX\7R;I8DB4WL=NYR&1>3DW?B0/#VEY M[NAX[VX)C$Z_WX$]
.CWC-3_D#JTI/I1K>G]W4K=/IFGM@[FV!%@%!/L
>
MPIY;UFY=7=%AO_BY.S9Q-5L0.G(NF49=#A[O>+Q-[6>GAE_73/T/>C(
M;]S"HB_LA$"(#_E
;[YD"%O\W2!7Y>&QY"Y=<174+-[
G+AZ![1*(:@?*
MEX&BD)LY’N$Q9(5$’[3)LJS%OE[Z&!’\DOY6KSU[=!"I(UJPOS:Q/1<YM&<C
M\1.>@1JW.Y at AQ$L-;_8V^L)OL='%"-[3&HJ<[/X+>W9V=<&A?W:D%>C<_Q MS/-O5-:AX6.R\%V5MZ*_OZ2EMY\+WSR#V(9S5J+F2%LVS at J]P.34]SU?;;[T M%L[(?43
XJR=VAR1<8^QDENE;1+#UE5-;.]-M*7-3S!=/R]&R%JU1.U[&): M+L'X.H];J8(4%1\V4:^\7=I3M>P)B](M:06;2TSH'\@F?#KDS@)N*W/)@VQA MQ@&O41#0&8KX$$*B<3.I6%NKXN:,M?#@&71J.7U%6B[[QX\'647>?:4B"W>M M*NOQ=0OV?@/>;;=WX=VPH)/&.!-[0;<0Y+QR\2Z!_FZS\;X%PU\X3HGAJ1TV MW%[OQ[RG[.AVE"MF%_C\.+4=S+9!/D,$MUH(J2X[+9Q*S\$)"X$@L?54V
AR
M\5"L^M;WP”_4KCU)W]CY[QQ]P&,3N2L>;!WI/B\Y_IJ;UZ/E/,W53GO^V
M0?2D]$1I(BMJ0>/9A0’,"=3&L:/P/.!_P[P#,VGGH?4I81WM,+O>!R.G M30$TMB?0;EMC!TV"]]
^N;JZ?//7U>O+G]^<OJ_H.U!X,TPF=KN)/XZRC)P M[&'P7E'X
E))POG;R],Z74WYU_B=\MOWYKW6-OA’/?Y/-_ZZN=>7\WP;M
MVZ[E+$88G at 9D9’M’T^=JHA.&E:6**1Q$L8IEN&A5=B?<BO$\E%P6S,TD*9 M=4+99W"(NC672<EPT3FRFLH^=NRH7SC[BWJ%J4S6AT8 at 8T6AXTQLB\?0A(8Q M&L\P08M&)9F:;F&-7EAC%-:8J+AJ6%QEQ57*#-FNRFJ0/[$.6;@<T'/
E,V
M14NN__YWF2>[%$MW2WALD%=HHOSB87ZQ-2A,",91(O5CUMPYM&.9(I9SH4 M.#[R;Z!U',?QO[@VH<$M/(WBY?'<IW:-50HT[/N'$$?,-FUJ(\?^S+D]@8?! M/V[SD$?#/T7Q-4_F-?
GRC0,X1N()^LV>+FS#O->8+$JC-YH’04FE"RY/ M+RY!8Y_'43W/7;$-A+D?PCUP7P/B@;]P84RW0Y/NA<S<@(?P89-D-DWX3N7P M.H0HS\.LCQHGDVC%QH=YM'"SK6I[E"^*M.#_8C6$F7/?FV/?N:%F^C/;I6)& M&8N;I4[K5G!:ESEMB.&#[3C\U%K+<]W=>.X$.^A&-5MTL^K$[F(FK-K'K6"= M?J75*7>7^DX/?;<N#;N1R2)LJFJQ4)$=2IEU\;DTDP!8.>
6JQ$?<&LJD8\A
MG6%HXJ.AXD^=C
ZJ-)/X3EB73W<!)Y@!7OZOC\F168<NKA+Z<JF40.3J MXCE at A'.
;Q[),>/)C>1%1,TQ2B0:;@61KB(!3Q!5Q]X!M^H1]\&[H01W$;. M, at 6\=/Z5*UT)?H+I;G8I(XL_#I_0X<7H,[\7])FH(OQHPP(
FB@/@:S]76P
MUAA5:.&A48-<XT:[MHJZI15J%15JY1UNY7"^1$\SLH6#+8S<5.E at P&[YJ+ MAHF6J\8JNV%]=L,2=E9]=E;U-2U]3U!PLATA at L3%0'1MA'T*07.0N>G
?G37
M(43$9Q[HBPK_$#<6<AUD;>(W'=(3"D+3$D[C+*5>R6J]CM5-6Q^U4Z9GE% M0\.@[[E at DP"\C^[1T9'KD?
TPZ64VJ9G;4M+T0$1 at F=SL9+0&!>'L3,56!B’
MJXDC^(%@?:SLQ,NH=PBL/54^+WC=4,^-MG203#*!\&
C\B.ACE<EYM
MM’)#FGJ"D7QAQ/D.5ME::#&9DC6I6J;F>N]=+(G/&)R<X0KEY(?!NLMXEY=
M’E/3MD7;3P[?4I,R/,N-0]E!"9L+R[/NI0!A"W8^JV%M5L,B5E9M5E;(ZOZ]
M_URF6K=Y_Z<;7Z4^_V=(V]_S2Z?9G_WV[^?Q[G[I6<5Z%AM<`)`9’V79;R
MI9L6A_GA^_[XDS%).82EJ]4?4B\BQ/HM>]]G+)ZC&S6?A>9’HL<C<+]NYY*
MB3<K8M’(D;-,?J^/(!,^Y-%‘G^OT’@2GGLKT%TZ;<#8L;A at Q>ZTB2(,
MRS6RHI-*.-SC!X2IH1-Q4MZT6.^!,;R7)P[6K?\K’!%]:'OH9&%O)5VK.< MP0;:W\9CMSH+5!JX^8WE6S9)DB1)DB1)DB1)DB1)DB1)DB1)DB1)DB1)DB1) ,WQG]#UW6
;X4```
end