CMGDK r49-rc2
K:/CMGDKv18/SDK/Source/SQL/MySQL/include/my_pthread.h
浏览该文件的文档。
00001 / *   C o p y r i g h t   ( C )   2 0 0 0 - 2 0 0 8   M y S Q L   A B ,   2 0 0 8 - 2 0 0 9   S u n   M i c r o s y s t e m s ,   I n c . 
00002  
00003        T h i s   p r o g r a m   i s   f r e e   s o f t w a r e ;   y o u   c a n   r e d i s t r i b u t e   i t   a n d / o r   m o d i f y 
00004  
00005        i t   u n d e r   t h e   t e r m s   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e   a s   p u b l i s h e d   b y 
00006  
00007        t h e   F r e e   S o f t w a r e   F o u n d a t i o n ;   v e r s i o n   2   o f   t h e   L i c e n s e . 
00008  
00009        T h i s   p r o g r a m   i s   d i s t r i b u t e d   i n   t h e   h o p e   t h a t   i t   w i l l   b e   u s e f u l , 
00010  
00011        b u t   W I T H O U T   A N Y   W A R R A N T Y ;   w i t h o u t   e v e n   t h e   i m p l i e d   w a r r a n t y   o f 
00012  
00013        M E R C H A N T A B I L I T Y   o r   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E .     S e e   t h e 
00014  
00015        G N U   G e n e r a l   P u b l i c   L i c e n s e   f o r   m o r e   d e t a i l s . 
00016  
00017        Y o u   s h o u l d   h a v e   r e c e i v e d   a   c o p y   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e 
00018  
00019        a l o n g   w i t h   t h i s   p r o g r a m ;   i f   n o t ,   w r i t e   t o   t h e   F r e e   S o f t w a r e 
00020  
00021        F o u n d a t i o n ,   I n c . ,   5 9   T e m p l e   P l a c e ,   S u i t e   3 3 0 ,   B o s t o n ,   M A     0 2 1 1 1 - 1 3 0 7     U S A   * / 
00022  
00023  / *   D e f i n e s   t o   m a k e   d i f f e r e n t   t h r e a d   p a c k a g e s   c o m p a t i b l e   * / 
00024  
00025  # i f n d e f   _ m y _ p t h r e a d _ h 
00026  
00027  # d e f i n e   _ m y _ p t h r e a d _ h 
00028  
00029  # i f n d e f   E T I M E 
00030  
00031  # d e f i n e   E T I M E   E T I M E D O U T               / *   F o r   F r e e B S D   * / 
00032  
00033  # e n d i f 
00034  
00035  # i f d e f     _ _ c p l u s p l u s 
00036  
00037  # d e f i n e   E X T E R N C   e x t e r n   " C " 
00038  
00039  e x t e r n   " C "   { 
00040  
00041  # e l s e 
00042  
00043  # d e f i n e   E X T E R N C 
00044  
00045  # e n d i f   / *   _ _ c p l u s p l u s   * /   
00046  
00047  # i f   d e f i n e d ( _ _ W I N _ _ ) 
00048  
00049  t y p e d e f   C R I T I C A L _ S E C T I O N   p t h r e a d _ m u t e x _ t ; 
00050  
00051  t y p e d e f   D W O R D         p t h r e a d _ t ; 
00052  
00053  t y p e d e f   s t r u c t   t h r e a d _ a t t r   { 
00054  
00055          D W O R D   d w S t a c k S i z e   ; 
00056  
00057          D W O R D   d w C r e a t i n g F l a g   ; 
00058  
00059  }   p t h r e a d _ a t t r _ t   ; 
00060  
00061  t y p e d e f   s t r u c t   {   i n t   d u m m y ;   }   p t h r e a d _ c o n d a t t r _ t ; 
00062  
00063  / *   I m p l e m e n t a t i o n   o f   p o s i x   c o n d i t i o n s   * / 
00064  
00065  t y p e d e f   s t r u c t   s t _ p t h r e a d _ l i n k   { 
00066  
00067      D W O R D   t h r e a d _ i d ; 
00068  
00069      s t r u c t   s t _ p t h r e a d _ l i n k   * n e x t ; 
00070  
00071  }   p t h r e a d _ l i n k ; 
00072  
00073  t y p e d e f   s t r u c t   { 
00074  
00075      u i n t 3 2   w a i t i n g ; 
00076  
00077      C R I T I C A L _ S E C T I O N   l o c k _ w a i t i n g ; 
00078  
00079    
00080  
00081      e n u m   { 
00082  
00083          S I G N A L =   0 , 
00084  
00085          B R O A D C A S T =   1 , 
00086  
00087          M A X _ E V E N T S =   2 
00088  
00089      }   E V E N T S ; 
00090  
00091      H A N D L E   e v e n t s [ M A X _ E V E N T S ] ; 
00092  
00093      H A N D L E   b r o a d c a s t _ b l o c k _ e v e n t ; 
00094  
00095  }   p t h r e a d _ c o n d _ t ; 
00096  
00097  
00098  
00099  t y p e d e f   i n t   p t h r e a d _ m u t e x a t t r _ t ; 
00100  
00101  # d e f i n e   p t h r e a d _ s e l f ( )   G e t C u r r e n t T h r e a d I d ( ) 
00102  
00103  # d e f i n e   p t h r e a d _ h a n d l e r _ t   E X T E R N C   v o i d   *   _ _ c d e c l 
00104  
00105  t y p e d e f   v o i d   *   ( _ _ c d e c l   * p t h r e a d _ h a n d l e r ) ( v o i d   * ) ; 
00106  
00107  / * 
00108  
00109      S t r u c t   a n d   m a c r o s   t o   b e   u s e d   i n   c o m b i n a t i o n   w i t h   t h e 
00110  
00111      w i n d o w s   i m p l e m e n t a t i o n   o f   p t h r e a d _ c o n d _ t i m e d w a i t 
00112  
00113  * / 
00114  
00115  / * 
00116  
00117        D e c l a r e   a   u n i o n   t o   m a k e   s u r e   F I L E T I M E   i s   p r o p e r l y   a l i g n e d 
00118  
00119        s o   i t   c a n   b e   u s e d   d i r e c t l y   a s   a   6 4   b i t   v a l u e .   T h e   v a l u e 
00120  
00121        s t o r e d   i s   i n   1 0 0 n s   u n i t s . 
00122  
00123    * / 
00124  
00125  u n i o n   f t 6 4   { 
00126  
00127      F I L E T I M E   f t ; 
00128  
00129      _ _ i n t 6 4   i 6 4 ; 
00130  
00131  } ; 
00132  
00133  s t r u c t   t i m e s p e c   { 
00134  
00135      u n i o n   f t 6 4   t v ; 
00136  
00137      / *   T h e   m a x   t i m e o u t   v a l u e   i n   m i l l i s e c o n d   f o r   p t h r e a d _ c o n d _ t i m e d w a i t   * / 
00138  
00139      l o n g   m a x _ t i m e o u t _ m s e c ; 
00140  
00141  } ; 
00142  
00143  # d e f i n e   s e t _ t i m e s p e c _ t i m e _ n s e c ( A B S T I M E , T I M E , N S E C )   d o   {                     \ 
00144  
00145      ( A B S T I M E ) . t v . i 6 4 =   ( T I M E ) + ( _ _ i n t 6 4 ) ( N S E C ) / 1 0 0 ;                                   \ 
00146  
00147      ( A B S T I M E ) . m a x _ t i m e o u t _ m s e c =   ( l o n g ) ( ( N S E C ) / 1 0 0 0 0 0 0 ) ;                       \ 
00148  
00149  }   w h i l e ( 0 ) 
00150  
00151  # d e f i n e   s e t _ t i m e s p e c _ n s e c ( A B S T I M E , N S E C )   d o   {                                         \ 
00152  
00153      u n i o n   f t 6 4   t v ;                                                                                                 \ 
00154  
00155      G e t S y s t e m T i m e A s F i l e T i m e ( & t v . f t ) ;                                                             \ 
00156  
00157      s e t _ t i m e s p e c _ t i m e _ n s e c ( ( A B S T I M E ) ,   t v . i 6 4 ,   ( N S E C ) ) ;                         \ 
00158  
00159  }   w h i l e ( 0 ) 
00160  
00161  i n t   w i n _ p t h r e a d _ m u t e x _ t r y l o c k ( p t h r e a d _ m u t e x _ t   * m u t e x ) ; 
00162  
00163  i n t   p t h r e a d _ c r e a t e ( p t h r e a d _ t   * , p t h r e a d _ a t t r _ t   * , p t h r e a d _ h a n d l e r , v o i d   * ) ; 
00164  
00165  i n t   p t h r e a d _ c o n d _ i n i t ( p t h r e a d _ c o n d _ t   * c o n d ,   c o n s t   p t h r e a d _ c o n d a t t r _ t   * a t t r ) ; 
00166  
00167  i n t   p t h r e a d _ c o n d _ w a i t ( p t h r e a d _ c o n d _ t   * c o n d ,   p t h r e a d _ m u t e x _ t   * m u t e x ) ; 
00168  
00169  i n t   p t h r e a d _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t   * c o n d ,   p t h r e a d _ m u t e x _ t   * m u t e x , 
00170  
00171                    s t r u c t   t i m e s p e c   * a b s t i m e ) ; 
00172  
00173  i n t   p t h r e a d _ c o n d _ s i g n a l ( p t h r e a d _ c o n d _ t   * c o n d ) ; 
00174  
00175  i n t   p t h r e a d _ c o n d _ b r o a d c a s t ( p t h r e a d _ c o n d _ t   * c o n d ) ; 
00176  
00177  i n t   p t h r e a d _ c o n d _ d e s t r o y ( p t h r e a d _ c o n d _ t   * c o n d ) ; 
00178  
00179  i n t   p t h r e a d _ a t t r _ i n i t ( p t h r e a d _ a t t r _ t   * c o n n e c t _ a t t ) ; 
00180  
00181  i n t   p t h r e a d _ a t t r _ s e t s t a c k s i z e ( p t h r e a d _ a t t r _ t   * c o n n e c t _ a t t , D W O R D   s t a c k ) ; 
00182  
00183  i n t   p t h r e a d _ a t t r _ d e s t r o y ( p t h r e a d _ a t t r _ t   * c o n n e c t _ a t t ) ; 
00184  
00185  s t r u c t   t m   * l o c a l t i m e _ r ( c o n s t   t i m e _ t   * t i m e p , s t r u c t   t m   * t m p ) ; 
00186  
00187  s t r u c t   t m   * g m t i m e _ r ( c o n s t   t i m e _ t   * t i m e p , s t r u c t   t m   * t m p ) ; 
00188  
00189  v o i d   p t h r e a d _ e x i t ( v o i d   * a ) ; 
00190  
00191  i n t   p t h r e a d _ j o i n ( p t h r e a d _ t   t h r e a d ,   v o i d   * * v a l u e _ p t r ) ; 
00192  
00193  
00194  
00195  # d e f i n e   E T I M E D O U T   1 4 5               / *   W i n 3 2   d o e s n ' t   h a v e   t h i s   * / 
00196  
00197  # d e f i n e   H A V E _ L O C A L T I M E _ R         1 
00198  
00199  # d e f i n e   _ R E E N T R A N T             1 
00200  
00201  # d e f i n e   H A V E _ P T H R E A D _ A T T R _ S E T S T A C K S I Z E     1 
00202  
00203  
00204  
00205  # u n d e f   S A F E _ M U T E X               / *   T h i s   w i l l   c a u s e   c o n f l i c t s   * / 
00206  
00207  # d e f i n e   p t h r e a d _ k e y ( T , V )     D W O R D   V 
00208  
00209  # d e f i n e   p t h r e a d _ k e y _ c r e a t e ( A , B )   ( ( * A = T l s A l l o c ( ) ) = = 0 x F F F F F F F F ) 
00210  
00211  # d e f i n e   p t h r e a d _ k e y _ d e l e t e ( A )   T l s F r e e ( A ) 
00212  
00213  # d e f i n e   m y _ p t h r e a d _ s e t s p e c i f i c _ p t r ( T , V )   ( ! T l s S e t V a l u e ( ( T ) , ( V ) ) ) 
00214  
00215  # d e f i n e   p t h r e a d _ s e t s p e c i f i c ( A , B )   ( ! T l s S e t V a l u e ( ( A ) , ( B ) ) ) 
00216  
00217  # d e f i n e   p t h r e a d _ g e t s p e c i f i c ( A )   ( T l s G e t V a l u e ( A ) ) 
00218  
00219  # d e f i n e   m y _ p t h r e a d _ g e t s p e c i f i c ( T , A )   ( ( T )   T l s G e t V a l u e ( A ) ) 
00220  
00221  # d e f i n e   m y _ p t h r e a d _ g e t s p e c i f i c _ p t r ( T , V )   ( ( T )   T l s G e t V a l u e ( V ) ) 
00222  
00223  # d e f i n e   p t h r e a d _ e q u a l ( A , B )   ( ( A )   = =   ( B ) ) 
00224  
00225  # d e f i n e   p t h r e a d _ m u t e x _ i n i t ( A , B )     ( I n i t i a l i z e C r i t i c a l S e c t i o n ( A ) , 0 ) 
00226  
00227  # d e f i n e   p t h r e a d _ m u t e x _ l o c k ( A )     ( E n t e r C r i t i c a l S e c t i o n ( A ) , 0 ) 
00228  
00229  # d e f i n e   p t h r e a d _ m u t e x _ t r y l o c k ( A )   w i n _ p t h r e a d _ m u t e x _ t r y l o c k ( ( A ) ) 
00230  
00231  # d e f i n e   p t h r e a d _ m u t e x _ u n l o c k ( A )     ( L e a v e C r i t i c a l S e c t i o n ( A ) , 0 ) 
00232  
00233  # d e f i n e   p t h r e a d _ m u t e x _ d e s t r o y ( A )   D e l e t e C r i t i c a l S e c t i o n ( A ) 
00234  
00235  # d e f i n e   p t h r e a d _ k i l l ( A , B )   p t h r e a d _ d u m m y ( ( A )   ?   0   :   E S R C H ) 
00236  
00237  
00238  
00239  / *   D u m m y   d e f i n e s   f o r   e a s i e r   c o d e   * / 
00240  
00241  # d e f i n e   p t h r e a d _ a t t r _ s e t d e t a c h s t a t e ( A , B )   p t h r e a d _ d u m m y ( 0 ) 
00242  
00243  # d e f i n e   p t h r e a d _ a t t r _ s e t s c o p e ( A , B ) 
00244  
00245  # d e f i n e   p t h r e a d _ d e t a c h _ t h i s _ t h r e a d ( ) 
00246  
00247  # d e f i n e   p t h r e a d _ c o n d a t t r _ i n i t ( A ) 
00248  
00249  # d e f i n e   p t h r e a d _ c o n d a t t r _ d e s t r o y ( A ) 
00250  
00251  # d e f i n e   p t h r e a d _ y i e l d ( )   S w i t c h T o T h r e a d ( )   
00252  
00253  
00254  
00255  # e l s e   / *   N o r m a l   t h r e a d s   * / 
00256  
00257  # i f d e f   H A V E _ r t s _ t h r e a d s 
00258  
00259  # d e f i n e   s i g w a i t   o r g _ s i g w a i t 
00260  
00261  # i n c l u d e   < s i g n a l . h > 
00262  
00263  # u n d e f   s i g w a i t 
00264  
00265  # e n d i f 
00266  
00267  # i n c l u d e   < p t h r e a d . h > 
00268  
00269  # i f n d e f   _ R E E N T R A N T 
00270  
00271  # d e f i n e   _ R E E N T R A N T 
00272  
00273  # e n d i f 
00274  
00275  # i f d e f   H A V E _ T H R _ S E T C O N C U R R E N C Y 
00276  
00277  # i n c l u d e   < t h r e a d . h >           / *   P r o b a b l y   s o l a r i s   * / 
00278  
00279  # e n d i f 
00280  
00281  # i f d e f   H A V E _ S C H E D _ H 
00282  
00283  # i n c l u d e   < s c h e d . h > 
00284  
00285  # e n d i f 
00286  
00287  # i f d e f   H A V E _ S Y N C H _ H 
00288  
00289  # i n c l u d e   < s y n c h . h > 
00290  
00291  # e n d i f 
00292  
00293  # i f d e f   _ _ N E T W A R E _ _ 
00294  
00295  v o i d   m y _ p t h r e a d _ e x i t ( v o i d   * s t a t u s ) ; 
00296  
00297  # d e f i n e   p t h r e a d _ e x i t ( A )   m y _ p t h r e a d _ e x i t ( A ) 
00298  
00299  # e n d i f 
00300  
00301  # d e f i n e   p t h r e a d _ k e y ( T , V )   p t h r e a d _ k e y _ t   V 
00302  
00303  # d e f i n e   m y _ p t h r e a d _ g e t s p e c i f i c _ p t r ( T , V )   m y _ p t h r e a d _ g e t s p e c i f i c ( T , ( V ) ) 
00304  
00305  # d e f i n e   m y _ p t h r e a d _ s e t s p e c i f i c _ p t r ( T , V )   p t h r e a d _ s e t s p e c i f i c ( T , ( v o i d * )   ( V ) ) 
00306  
00307  # d e f i n e   p t h r e a d _ d e t a c h _ t h i s _ t h r e a d ( ) 
00308  
00309  # d e f i n e   p t h r e a d _ h a n d l e r _ t   E X T E R N C   v o i d   * 
00310  
00311  t y p e d e f   v o i d   * ( *   p t h r e a d _ h a n d l e r ) ( v o i d   * ) ; 
00312  
00313  / *   T e s t   f i r s t   f o r   R T S   o r   F S U   t h r e a d s   * / 
00314  
00315  # i f   d e f i n e d ( P T H R E A D _ S C O P E _ G L O B A L )   & &   ! d e f i n e d ( P T H R E A D _ S C O P E _ S Y S T E M ) 
00316  
00317  # d e f i n e   H A V E _ r t s _ t h r e a d s 
00318  
00319  e x t e r n   i n t   m y _ p t h r e a d _ c r e a t e _ d e t a c h e d ; 
00320  
00321  # d e f i n e   p t h r e a d _ s i g m a s k ( A , B , C )   s i g p r o c m a s k ( ( A ) , ( B ) , ( C ) ) 
00322  
00323  # d e f i n e   P T H R E A D _ C R E A T E _ D E T A C H E D   & m y _ p t h r e a d _ c r e a t e _ d e t a c h e d 
00324  
00325  # d e f i n e   P T H R E A D _ S C O P E _ S Y S T E M     P T H R E A D _ S C O P E _ G L O B A L 
00326  
00327  # d e f i n e   P T H R E A D _ S C O P E _ P R O C E S S   P T H R E A D _ S C O P E _ L O C A L 
00328  
00329  # d e f i n e   U S E _ A L A R M _ T H R E A D 
00330  
00331  # e n d i f   / *   d e f i n e d ( P T H R E A D _ S C O P E _ G L O B A L )   & &   ! d e f i n e d ( P T H R E A D _ S C O P E _ S Y S T E M )   * / 
00332  
00333  # i f   d e f i n e d ( _ B S D I _ V E R S I O N )   & &   _ B S D I _ V E R S I O N   <   1 9 9 9 1 0 
00334  
00335  i n t   s i g w a i t ( s i g s e t _ t   * s e t ,   i n t   * s i g ) ; 
00336  
00337  # e n d i f 
00338  
00339  # i f n d e f   H A V E _ N O N P O S I X _ S I G W A I T 
00340  
00341  # d e f i n e   m y _ s i g w a i t ( A , B )   s i g w a i t ( ( A ) , ( B ) ) 
00342  
00343  # e l s e 
00344  
00345  i n t   m y _ s i g w a i t ( c o n s t   s i g s e t _ t   * s e t , i n t   * s i g ) ; 
00346  
00347  # e n d i f 
00348  
00349  # i f d e f   H A V E _ N O N P O S I X _ P T H R E A D _ M U T E X _ I N I T 
00350  
00351  # i f n d e f   S A F E _ M U T E X 
00352  
00353  # d e f i n e   p t h r e a d _ m u t e x _ i n i t ( a , b )   m y _ p t h r e a d _ m u t e x _ n o p o s i x _ i n i t ( ( a ) , ( b ) ) 
00354  
00355  e x t e r n   i n t   m y _ p t h r e a d _ m u t e x _ n o p o s i x _ i n i t ( p t h r e a d _ m u t e x _ t   * m p , 
00356  
00357                                                                                    c o n s t   p t h r e a d _ m u t e x a t t r _ t   * a t t r ) ; 
00358  
00359  # e n d i f   / *   S A F E _ M U T E X   * / 
00360  
00361  # d e f i n e   p t h r e a d _ c o n d _ i n i t ( a , b )   m y _ p t h r e a d _ c o n d _ n o p o s i x _ i n i t ( ( a ) , ( b ) ) 
00362  
00363  e x t e r n   i n t   m y _ p t h r e a d _ c o n d _ n o p o s i x _ i n i t ( p t h r e a d _ c o n d _ t   * m p , 
00364  
00365                                                                                  c o n s t   p t h r e a d _ c o n d a t t r _ t   * a t t r ) ; 
00366  
00367  # e n d i f   / *   H A V E _ N O N P O S I X _ P T H R E A D _ M U T E X _ I N I T   * / 
00368  
00369  # i f   d e f i n e d ( H A V E _ S I G T H R E A D M A S K )   & &   ! d e f i n e d ( H A V E _ P T H R E A D _ S I G M A S K ) 
00370  
00371  # d e f i n e   p t h r e a d _ s i g m a s k ( A , B , C )   s i g t h r e a d m a s k ( ( A ) , ( B ) , ( C ) ) 
00372  
00373  # e n d i f 
00374  
00375  # i f   ! d e f i n e d ( H A V E _ S I G W A I T )   & &   ! d e f i n e d ( H A V E _ r t s _ t h r e a d s )   & &   ! d e f i n e d ( s i g w a i t )   & &   ! d e f i n e d ( a l p h a _ l i n u x _ p o r t )   & &   ! d e f i n e d ( H A V E _ N O N P O S I X _ S I G W A I T )   & &   ! d e f i n e d ( H A V E _ D E C _ 3 _ 2 _ T H R E A D S )   & &   ! d e f i n e d ( _ A I X ) 
00376  
00377  i n t   s i g w a i t ( s i g s e t _ t   * s e t p ,   i n t   * s i g p ) ;       / *   U s e   o u r   i m p l e m e n t i o n   * / 
00378  
00379  # e n d i f 
00380  
00381  
00382  
00383  / * 
00384  
00385      W e   d e f i n e   m y _ s i g s e t ( )   a n d   u s e   t h a t   i n s t e a d   o f   t h e   s y s t e m   s i g s e t ( )   s o   t h a t 
00386  
00387      w e   c a n   f a v o r   a n   i m p l e m e n t a t i o n   b a s e d   o n   s i g a c t i o n ( ) .   O n   s o m e   s y s t e m s ,   s u c h 
00388  
00389      a s   M a c   O S   X ,   s i g s e t ( )   r e s u l t s   i n   f l a g s   s u c h   a s   S A _ R E S T A R T   b e i n g   s e t ,   a n d 
00390  
00391      w e   w a n t   t o   m a k e   s u r e   t h a t   n o   s u c h   f l a g s   a r e   s e t . 
00392  
00393  * / 
00394  
00395  # i f   d e f i n e d ( H A V E _ S I G A C T I O N )   & &   ! d e f i n e d ( m y _ s i g s e t ) 
00396  
00397  # d e f i n e   m y _ s i g s e t ( A , B )   d o   {   s t r u c t   s i g a c t i o n   l _ s ;   s i g s e t _ t   l _ s e t ;   i n t   l _ r c ;   \ 
00398  
00399                                                          D B U G _ A S S E R T ( ( A )   ! =   0 ) ;                                                     \ 
00400  
00401                                                          s i g e m p t y s e t ( & l _ s e t ) ;                                                         \ 
00402  
00403                                                          l _ s . s a _ h a n d l e r   =   ( B ) ;                                                       \ 
00404  
00405                                                          l _ s . s a _ m a s k       =   l _ s e t ;                                                     \ 
00406  
00407                                                          l _ s . s a _ f l a g s       =   0 ;                                                           \ 
00408  
00409                                                          l _ r c =   s i g a c t i o n ( ( A ) ,   & l _ s ,   ( s t r u c t   s i g a c t i o n   * )   N U L L ) ; \ 
00410  
00411                                                          D B U G _ A S S E R T ( l _ r c   = =   0 ) ;                                                   \ 
00412  
00413                                                      }   w h i l e   ( 0 ) 
00414  
00415  # e l i f   d e f i n e d ( H A V E _ S I G S E T )   & &   ! d e f i n e d ( m y _ s i g s e t ) 
00416  
00417  # d e f i n e   m y _ s i g s e t ( A , B )   s i g s e t ( ( A ) , ( B ) ) 
00418  
00419  # e l i f   ! d e f i n e d ( m y _ s i g s e t ) 
00420  
00421  # d e f i n e   m y _ s i g s e t ( A , B )   s i g n a l ( ( A ) , ( B ) ) 
00422  
00423  # e n d i f 
00424  
00425  # i f   ! d e f i n e d ( H A V E _ P T H R E A D _ A T T R _ S E T S C O P E )   | |   d e f i n e d ( H A V E _ D E C _ 3 _ 2 _ T H R E A D S ) 
00426  
00427  # d e f i n e   p t h r e a d _ a t t r _ s e t s c o p e ( A , B ) 
00428  
00429  # u n d e f     H A V E _ G E T H O S T B Y A D D R _ R             / *   N o   d e f i n i t i o n   * / 
00430  
00431  # e n d i f 
00432  
00433  # i f   d e f i n e d ( H A V E _ B R O K E N _ P T H R E A D _ C O N D _ T I M E D W A I T )   & &   ! d e f i n e d ( S A F E _ M U T E X ) 
00434  
00435  e x t e r n   i n t   m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t   * c o n d , 
00436  
00437                            p t h r e a d _ m u t e x _ t   * m u t e x , 
00438  
00439                            s t r u c t   t i m e s p e c   * a b s t i m e ) ; 
00440  
00441  # d e f i n e   p t h r e a d _ c o n d _ t i m e d w a i t ( A , B , C )   m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( ( A ) , ( B ) , ( C ) ) 
00442  
00443  # e n d i f 
00444  
00445  # i f   ! d e f i n e d (   H A V E _ N O N P O S I X _ P T H R E A D _ G E T S P E C I F I C ) 
00446  
00447  # d e f i n e   m y _ p t h r e a d _ g e t s p e c i f i c ( A , B )   ( ( A )   p t h r e a d _ g e t s p e c i f i c ( B ) ) 
00448  
00449  # e l s e 
00450  
00451  # d e f i n e   m y _ p t h r e a d _ g e t s p e c i f i c ( A , B )   ( ( A )   m y _ p t h r e a d _ g e t s p e c i f i c _ i m p ( B ) ) 
00452  
00453  v o i d   * m y _ p t h r e a d _ g e t s p e c i f i c _ i m p ( p t h r e a d _ k e y _ t   k e y ) ; 
00454  
00455  # e n d i f 
00456  
00457  # i f n d e f   H A V E _ L O C A L T I M E _ R 
00458  
00459  s t r u c t   t m   * l o c a l t i m e _ r ( c o n s t   t i m e _ t   * c l o c k ,   s t r u c t   t m   * r e s ) ; 
00460  
00461  # e n d i f 
00462  
00463  # i f n d e f   H A V E _ G M T I M E _ R 
00464  
00465  s t r u c t   t m   * g m t i m e _ r ( c o n s t   t i m e _ t   * c l o c k ,   s t r u c t   t m   * r e s ) ; 
00466  
00467  # e n d i f 
00468  
00469  # i f d e f   H A V E _ P T H R E A D _ C O N D A T T R _ C R E A T E 
00470  
00471  / *   D C E   t h r e a d s   o n   H P U X   1 0 . 2 0   * / 
00472  
00473  # d e f i n e   p t h r e a d _ c o n d a t t r _ i n i t   p t h r e a d _ c o n d a t t r _ c r e a t e 
00474  
00475  # d e f i n e   p t h r e a d _ c o n d a t t r _ d e s t r o y   p t h r e a d _ c o n d a t t r _ d e l e t e 
00476  
00477  # e n d i f 
00478  
00479  / *   F S U   T H R E A D S   * / 
00480  
00481  # i f   ! d e f i n e d ( H A V E _ P T H R E A D _ K E Y _ D E L E T E )   & &   ! d e f i n e d ( p t h r e a d _ k e y _ d e l e t e ) 
00482  
00483  # d e f i n e   p t h r e a d _ k e y _ d e l e t e ( A )   p t h r e a d _ d u m m y ( 0 ) 
00484  
00485  # e n d i f 
00486  
00487  # i f   ( ( d e f i n e d ( H A V E _ P T H R E A D _ A T T R _ C R E A T E )   & &   ! d e f i n e d ( H A V E _ S I G W A I T ) )   | |   d e f i n e d ( H A V E _ D E C _ 3 _ 2 _ T H R E A D S ) ) 
00488  
00489  / *   T h i s   i s   s e t   o n   A I X _ 3 _ 2   a n d   S i e m e n s   u n i x   ( a n d   D E C   O S F / 1   3 . 2   t o o )   * / 
00490  
00491  # d e f i n e   p t h r e a d _ k e y _ c r e a t e ( A , B )   \ 
00492  
00493          p t h r e a d _ k e y c r e a t e ( A , ( B )   ? \ 
00494  
00495                      ( p t h r e a d _ d e s t r u c t o r _ t )   ( B )   : \ 
00496  
00497                      ( p t h r e a d _ d e s t r u c t o r _ t )   p t h r e a d _ d u m m y ) 
00498  
00499  # d e f i n e   p t h r e a d _ a t t r _ i n i t ( A )   p t h r e a d _ a t t r _ c r e a t e ( A ) 
00500  
00501  # d e f i n e   p t h r e a d _ a t t r _ d e s t r o y ( A )   p t h r e a d _ a t t r _ d e l e t e ( A ) 
00502  
00503  # d e f i n e   p t h r e a d _ a t t r _ s e t d e t a c h s t a t e ( A , B )   p t h r e a d _ d u m m y ( 0 ) 
00504  
00505  # d e f i n e   p t h r e a d _ c r e a t e ( A , B , C , D )   p t h r e a d _ c r e a t e ( ( A ) , * ( B ) , ( C ) , ( D ) ) 
00506  
00507  # i f n d e f   p t h r e a d _ s i g m a s k 
00508  
00509  # d e f i n e   p t h r e a d _ s i g m a s k ( A , B , C )   s i g p r o c m a s k ( ( A ) , ( B ) , ( C ) ) 
00510  
00511  # e n d i f 
00512  
00513  # d e f i n e   p t h r e a d _ k i l l ( A , B )   p t h r e a d _ d u m m y ( ( A )   ?   0   :   E S R C H ) 
00514  
00515  # u n d e f     p t h r e a d _ d e t a c h _ t h i s _ t h r e a d 
00516  
00517  # d e f i n e   p t h r e a d _ d e t a c h _ t h i s _ t h r e a d ( )   {   p t h r e a d _ t   t m p = p t h r e a d _ s e l f ( )   ;   p t h r e a d _ d e t a c h ( & t m p ) ;   } 
00518  
00519  # e l i f   ! d e f i n e d ( _ _ N E T W A R E _ _ )   / *   H A V E _ P T H R E A D _ A T T R _ C R E A T E   & &   ! H A V E _ S I G W A I T   * / 
00520  
00521  # i f n d e f   H A V E _ P T H R E A D _ K I L L 
00522  
00523  #   d e f i n e   H A V E _ P T H R E A D _ K I L L 
00524  
00525  # e n d i f 
00526  
00527  # e n d i f 
00528  
00529  # e n d i f   / *   d e f i n e d ( _ _ W I N _ _ )   * / 
00530  
00531  # i f   d e f i n e d ( H P U X 1 0 )   & &   ! d e f i n e d ( D O N T _ R E M A P _ P T H R E A D _ F U N C T I O N S ) 
00532  
00533  # u n d e f   p t h r e a d _ c o n d _ t i m e d w a i t 
00534  
00535  # d e f i n e   p t h r e a d _ c o n d _ t i m e d w a i t ( a , b , c )   m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( ( a ) , ( b ) , ( c ) ) 
00536  
00537  i n t   m y _ p t h r e a d _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t   * c o n d ,   p t h r e a d _ m u t e x _ t   * m u t e x , 
00538  
00539                          s t r u c t   t i m e s p e c   * a b s t i m e ) ; 
00540  
00541  # e n d i f 
00542  
00543  # i f   d e f i n e d ( H P U X 1 0 ) 
00544  
00545  # d e f i n e   p t h r e a d _ a t t r _ g e t s t a c k s i z e ( A , B )   m y _ p t h r e a d _ a t t r _ g e t s t a c k s i z e ( A , B ) 
00546  
00547  v o i d   m y _ p t h r e a d _ a t t r _ g e t s t a c k s i z e ( p t h r e a d _ a t t r _ t   * a t t r i b ,   s i z e _ t   * s i z e ) ; 
00548  
00549  # e n d i f 
00550  
00551  # i f   d e f i n e d ( H A V E _ P O S I X 1 0 0 3 _ 4 a _ M U T E X )   & &   ! d e f i n e d ( D O N T _ R E M A P _ P T H R E A D _ F U N C T I O N S ) 
00552  
00553  # u n d e f   p t h r e a d _ m u t e x _ t r y l o c k 
00554  
00555  # d e f i n e   p t h r e a d _ m u t e x _ t r y l o c k ( a )   m y _ p t h r e a d _ m u t e x _ t r y l o c k ( ( a ) ) 
00556  
00557  i n t   m y _ p t h r e a d _ m u t e x _ t r y l o c k ( p t h r e a d _ m u t e x _ t   * m u t e x ) ; 
00558  
00559  # e n d i f 
00560  
00561  # i f   ! d e f i n e d ( H A V E _ P T H R E A D _ Y I E L D _ O N E _ A R G )   & &   ! d e f i n e d ( H A V E _ P T H R E A D _ Y I E L D _ Z E R O _ A R G ) 
00562  
00563  / *   n o   p t h r e a d _ y i e l d ( )   a v a i l a b l e   * / 
00564  
00565  # i f d e f   H A V E _ S C H E D _ Y I E L D 
00566  
00567  # d e f i n e   p t h r e a d _ y i e l d ( )   s c h e d _ y i e l d ( ) 
00568  
00569  # e l i f   d e f i n e d ( H A V E _ P T H R E A D _ Y I E L D _ N P )   / *   c a n   b e   M a c   O S   X   * / 
00570  
00571  # d e f i n e   p t h r e a d _ y i e l d ( )   p t h r e a d _ y i e l d _ n p ( ) 
00572  
00573  # e l i f   d e f i n e d ( H A V E _ T H R _ Y I E L D ) 
00574  
00575  # d e f i n e   p t h r e a d _ y i e l d ( )   t h r _ y i e l d ( ) 
00576  
00577  # e n d i f 
00578  
00579  # e n d i f 
00580  
00581  / * 
00582  
00583      T h e   d e f i n e s   s e t _ t i m e s p e c   a n d   s e t _ t i m e s p e c _ n s e c   s h o u l d   b e   u s e d 
00584  
00585      f o r   c a l c u l a t i n g   a n   a b s o l u t e   t i m e   a t   w h i c h 
00586  
00587      p t h r e a d _ c o n d _ t i m e d w a i t   s h o u l d   t i m e o u t 
00588  
00589  * / 
00590  
00591  # d e f i n e   s e t _ t i m e s p e c ( A B S T I M E , S E C )   s e t _ t i m e s p e c _ n s e c ( ( A B S T I M E ) , ( S E C ) * 1 0 0 0 0 0 0 0 0 0 U L L ) 
00592  
00593  # i f n d e f   s e t _ t i m e s p e c _ n s e c 
00594  
00595  # d e f i n e   s e t _ t i m e s p e c _ n s e c ( A B S T I M E , N S E C )                                                                   \ 
00596  
00597      s e t _ t i m e s p e c _ t i m e _ n s e c ( ( A B S T I M E ) , m y _ g e t s y s t i m e ( ) , ( N S E C ) ) 
00598  
00599  # e n d i f   / *   ! s e t _ t i m e s p e c _ n s e c   * / 
00600  
00601  / *   a d a p t   f o r   t w o   d i f f e r e n t   f l a v o r s   o f   s t r u c t   t i m e s p e c   * / 
00602  
00603  # i f d e f   H A V E _ T I M E S P E C _ T S _ S E C 
00604  
00605  # d e f i n e   M Y _ t v _ s e c     t s _ s e c 
00606  
00607  # d e f i n e   M Y _ t v _ n s e c   t s _ n s e c 
00608  
00609  # e l s e 
00610  
00611  # d e f i n e   M Y _ t v _ s e c     t v _ s e c 
00612  
00613  # d e f i n e   M Y _ t v _ n s e c   t v _ n s e c 
00614  
00615  # e n d i f   / *   H A V E _ T I M E S P E C _ T S _ S E C   * / 
00616  
00617  # i f n d e f   s e t _ t i m e s p e c _ t i m e _ n s e c 
00618  
00619  # d e f i n e   s e t _ t i m e s p e c _ t i m e _ n s e c ( A B S T I M E , T I M E , N S E C )   d o   {                                     \ 
00620  
00621      u l o n g l o n g   n s e c =   ( N S E C ) ;                                                                                               \ 
00622  
00623      u l o n g l o n g   n o w =   ( T I M E )   +   ( n s e c / 1 0 0 ) ;                                                                       \ 
00624  
00625      ( A B S T I M E ) . M Y _ t v _ s e c =     ( n o w   /   1 0 0 0 0 0 0 0 U L L ) ;                                                     \ 
00626  
00627      ( A B S T I M E ) . M Y _ t v _ n s e c =   ( n o w   %   1 0 0 0 0 0 0 0 U L L   *   1 0 0   +   ( n s e c   %   1 0 0 ) ) ;           \ 
00628  
00629  }   w h i l e ( 0 ) 
00630  
00631  # e n d i f   / *   ! s e t _ t i m e s p e c _ t i m e _ n s e c   * / 
00632  
00633  / *   s a f e _ m u t e x   a d d s   c h e c k i n g   t o   m u t e x   f o r   e a s i e r   d e b u g g i n g   * / 
00634  
00635  # i f   d e f i n e d ( _ _ N E T W A R E _ _ )   & &   ! d e f i n e d ( S A F E _ M U T E X _ D E T E C T _ D E S T R O Y ) 
00636  
00637  # d e f i n e   S A F E _ M U T E X _ D E T E C T _ D E S T R O Y 
00638  
00639  # e n d i f 
00640  
00641  s t r u c t   s t _ h a s h ; 
00642  
00643  t y p e d e f   s t r u c t   s t _ s a f e _ m u t e x _ t 
00644  
00645  { 
00646  
00647      p t h r e a d _ m u t e x _ t   g l o b a l , m u t e x ; 
00648  
00649      c o n s t   c h a r   * f i l e ,   * n a m e ; 
00650  
00651      u i n t   l i n e , c o u n t ; 
00652  
00653      m y f   c r e a t e _ f l a g s ,   a c t i v e _ f l a g s ; 
00654  
00655      u l o n g   i d ; 
00656  
00657      p t h r e a d _ t   t h r e a d ; 
00658  
00659      s t r u c t   s t _ h a s h   * l o c k e d _ m u t e x ,   * u s e d _ m u t e x ; 
00660  
00661      s t r u c t   s t _ s a f e _ m u t e x _ t   * p r e v ,   * n e x t ; 
00662  
00663  # i f d e f   S A F E _ M U T E X _ D E T E C T _ D E S T R O Y 
00664  
00665      s t r u c t   s t _ s a f e _ m u t e x _ i n f o _ t   * i n f o ;     / *   t o   t r a c k   d e s t r o y i n g   o f   m u t e x e s   * / 
00666  
00667  # e n d i f 
00668  
00669  }   s a f e _ m u t e x _ t ; 
00670  
00671  t y p e d e f   s t r u c t   s t _ s a f e _ m u t e x _ d e a d l o c k _ t 
00672  
00673  { 
00674  
00675      c o n s t   c h a r   * f i l e ,   * n a m e ; 
00676  
00677      s a f e _ m u t e x _ t   * m u t e x ; 
00678  
00679      u i n t   l i n e ; 
00680  
00681      u l o n g   c o u n t ; 
00682  
00683      u l o n g   i d ; 
00684  
00685      m y _ b o o l   w a r n i n g _ o n l y ; 
00686  
00687  }   s a f e _ m u t e x _ d e a d l o c k _ t ; 
00688  
00689  # i f d e f   S A F E _ M U T E X _ D E T E C T _ D E S T R O Y 
00690  
00691  / * 
00692  
00693      U s e d   t o   t r a c k   t h e   d e s t r o y i n g   o f   m u t e x e s .   T h i s   n e e d s   t o   b e   a   s e p e r a t e 
00694  
00695      s t r u c t u r e   b e c a u s e   t h e   s a f e _ m u t e x _ t   s t r u c t u r e   c o u l d   b e   f r e e d   b e f o r e 
00696  
00697      t h e   m u t e x e s   a r e   d e s t r o y e d . 
00698  
00699  * / 
00700  
00701  t y p e d e f   s t r u c t   s t _ s a f e _ m u t e x _ i n f o _ t 
00702  
00703  { 
00704  
00705      s t r u c t   s t _ s a f e _ m u t e x _ i n f o _ t   * n e x t ; 
00706  
00707      s t r u c t   s t _ s a f e _ m u t e x _ i n f o _ t   * p r e v ; 
00708  
00709      c o n s t   c h a r   * i n i t _ f i l e ; 
00710  
00711      u i n t 3 2   i n i t _ l i n e ; 
00712  
00713  }   s a f e _ m u t e x _ i n f o _ t ; 
00714  
00715  # e n d i f   / *   S A F E _ M U T E X _ D E T E C T _ D E S T R O Y   * / 
00716  
00717  i n t   s a f e _ m u t e x _ i n i t ( s a f e _ m u t e x _ t   * m p ,   c o n s t   p t h r e a d _ m u t e x a t t r _ t   * a t t r , 
00718  
00719                                          c o n s t   c h a r   * n a m e ,   m y f   m y _ f l a g s , 
00720  
00721                                          c o n s t   c h a r   * f i l e ,   u i n t   l i n e ) ; 
00722  
00723  i n t   s a f e _ m u t e x _ l o c k ( s a f e _ m u t e x _ t   * m p ,   m y f   m y _ f l a g s ,   c o n s t   c h a r   * f i l e , 
00724  
00725                                          u i n t   l i n e ) ; 
00726  
00727  i n t   s a f e _ m u t e x _ u n l o c k ( s a f e _ m u t e x _ t   * m p , c o n s t   c h a r   * f i l e ,   u i n t   l i n e ) ; 
00728  
00729  i n t   s a f e _ m u t e x _ d e s t r o y ( s a f e _ m u t e x _ t   * m p , c o n s t   c h a r   * f i l e ,   u i n t   l i n e ) ; 
00730  
00731  i n t   s a f e _ c o n d _ w a i t ( p t h r e a d _ c o n d _ t   * c o n d ,   s a f e _ m u t e x _ t   * m p , c o n s t   c h a r   * f i l e , 
00732  
00733                u i n t   l i n e ) ; 
00734  
00735  i n t   s a f e _ c o n d _ t i m e d w a i t ( p t h r e a d _ c o n d _ t   * c o n d ,   s a f e _ m u t e x _ t   * m p , 
00736  
00737              s t r u c t   t i m e s p e c   * a b s t i m e ,   c o n s t   c h a r   * f i l e ,   u i n t   l i n e ) ; 
00738  
00739  v o i d   s a f e _ m u t e x _ g l o b a l _ i n i t ( v o i d ) ; 
00740  
00741  v o i d   s a f e _ m u t e x _ e n d ( F I L E   * f i l e ) ; 
00742  
00743  v o i d   s a f e _ m u t e x _ f r e e _ d e a d l o c k _ d a t a ( s a f e _ m u t e x _ t   * m p ) ; 
00744  
00745      / *   W r a p p e r s   i f   s a f e   m u t e x   i s   a c t u a l l y   u s e d   * / 
00746  
00747  # d e f i n e   M Y F _ T R Y _ L O C K                             1 
00748  
00749  # d e f i n e   M Y F _ N O _ D E A D L O C K _ D E T E C T I O N   2 
00750  
00751  # i f d e f   S A F E _ M U T E X 
00752  
00753  # u n d e f   p t h r e a d _ m u t e x _ i n i t 
00754  
00755  # u n d e f   p t h r e a d _ m u t e x _ l o c k 
00756  
00757  # u n d e f   p t h r e a d _ m u t e x _ u n l o c k 
00758  
00759  # u n d e f   p t h r e a d _ m u t e x _ d e s t r o y 
00760  
00761  # u n d e f   p t h r e a d _ m u t e x _ w a i t 
00762  
00763  # u n d e f   p t h r e a d _ m u t e x _ t i m e d w a i t 
00764  
00765  # u n d e f   p t h r e a d _ m u t e x _ t 
00766  
00767  # u n d e f   p t h r e a d _ c o n d _ w a i t 
00768  
00769  # u n d e f   p t h r e a d _ c o n d _ t i m e d w a i t 
00770  
00771  # u n d e f   p t h r e a d _ m u t e x _ t r y l o c k 
00772  
00773  # d e f i n e   m y _ p t h r e a d _ m u t e x _ i n i t ( A , B , C , D )   s a f e _ m u t e x _ i n i t ( ( A ) , ( B ) , ( C ) , ( D ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 
00774  
00775  # d e f i n e   p t h r e a d _ m u t e x _ i n i t ( A , B )   s a f e _ m u t e x _ i n i t ( ( A ) , ( B ) , # A , 0 , _ _ F I L E _ _ , _ _ L I N E _ _ ) 
00776  
00777  # d e f i n e   p t h r e a d _ m u t e x _ l o c k ( A )   s a f e _ m u t e x _ l o c k ( ( A ) ,   0 ,   _ _ F I L E _ _ ,   _ _ L I N E _ _ ) 
00778  
00779  # d e f i n e   m y _ p t h r e a d _ m u t e x _ l o c k ( A , B )   s a f e _ m u t e x _ l o c k ( ( A ) ,   ( B ) ,   _ _ F I L E _ _ ,   _ _ L I N E _ _ ) 
00780  
00781  # d e f i n e   p t h r e a d _ m u t e x _ u n l o c k ( A )   s a f e _ m u t e x _ u n l o c k ( ( A ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 
00782  
00783  # d e f i n e   p t h r e a d _ m u t e x _ d e s t r o y ( A )   s a f e _ m u t e x _ d e s t r o y ( ( A ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 
00784  
00785  # d e f i n e   p t h r e a d _ c o n d _ w a i t ( A , B )   s a f e _ c o n d _ w a i t ( ( A ) , ( B ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 
00786  
00787  # d e f i n e   p t h r e a d _ c o n d _ t i m e d w a i t ( A , B , C )   s a f e _ c o n d _ t i m e d w a i t ( ( A ) , ( B ) , ( C ) , _ _ F I L E _ _ , _ _ L I N E _ _ ) 
00788  
00789  # d e f i n e   p t h r e a d _ m u t e x _ t r y l o c k ( A )   s a f e _ m u t e x _ l o c k ( ( A ) ,   M Y F _ T R Y _ L O C K ,   _ _ F I L E _ _ ,   _ _ L I N E _ _ ) 
00790  
00791  # d e f i n e   p t h r e a d _ m u t e x _ t   s a f e _ m u t e x _ t 
00792  
00793  # d e f i n e   s a f e _ m u t e x _ a s s e r t _ o w n e r ( m p )   \ 
00794  
00795                      D B U G _ A S S E R T ( ( m p ) - > c o u n t   >   0   & &   \ 
00796  
00797                                              p t h r e a d _ e q u a l ( p t h r e a d _ s e l f ( ) ,   ( m p ) - > t h r e a d ) ) 
00798  
00799  # d e f i n e   s a f e _ m u t e x _ a s s e r t _ n o t _ o w n e r ( m p )   \ 
00800  
00801                      D B U G _ A S S E R T ( !   ( m p ) - > c o u n t   | |   \ 
00802  
00803                                              !   p t h r e a d _ e q u a l ( p t h r e a d _ s e l f ( ) ,   ( m p ) - > t h r e a d ) ) 
00804  
00805  # e l s e 
00806  
00807  # d e f i n e   m y _ p t h r e a d _ m u t e x _ i n i t ( A , B , C , D )   p t h r e a d _ m u t e x _ i n i t ( ( A ) , ( B ) ) 
00808  
00809  # d e f i n e   m y _ p t h r e a d _ m u t e x _ l o c k ( A , B )   p t h r e a d _ m u t e x _ l o c k ( A ) 
00810  
00811  # d e f i n e   s a f e _ m u t e x _ a s s e r t _ o w n e r ( m p ) 
00812  
00813  # d e f i n e   s a f e _ m u t e x _ a s s e r t _ n o t _ o w n e r ( m p ) 
00814  
00815  # e n d i f   / *   S A F E _ M U T E X   * / 
00816  
00817  # i f   d e f i n e d ( M Y _ P T H R E A D _ F A S T M U T E X )   & &   ! d e f i n e d ( S A F E _ M U T E X ) 
00818  
00819  t y p e d e f   s t r u c t   s t _ m y _ p t h r e a d _ f a s t m u t e x _ t 
00820  
00821  { 
00822  
00823      p t h r e a d _ m u t e x _ t   m u t e x ; 
00824  
00825      u i n t   s p i n s ; 
00826  
00827      u i n t   r n g _ s t a t e ; 
00828  
00829  }   m y _ p t h r e a d _ f a s t m u t e x _ t ; 
00830  
00831  v o i d   f a s t m u t e x _ g l o b a l _ i n i t ( v o i d ) ; 
00832  
00833  i n t   m y _ p t h r e a d _ f a s t m u t e x _ i n i t ( m y _ p t h r e a d _ f a s t m u t e x _ t   * m p ,   
00834  
00835                                                              c o n s t   p t h r e a d _ m u t e x a t t r _ t   * a t t r ) ; 
00836  
00837  i n t   m y _ p t h r e a d _ f a s t m u t e x _ l o c k ( m y _ p t h r e a d _ f a s t m u t e x _ t   * m p ) ; 
00838  
00839  # u n d e f   p t h r e a d _ m u t e x _ i n i t 
00840  
00841  # u n d e f   p t h r e a d _ m u t e x _ l o c k 
00842  
00843  # u n d e f   p t h r e a d _ m u t e x _ u n l o c k 
00844  
00845  # u n d e f   p t h r e a d _ m u t e x _ d e s t r o y 
00846  
00847  # u n d e f   p t h r e a d _ m u t e x _ w a i t 
00848  
00849  # u n d e f   p t h r e a d _ m u t e x _ t i m e d w a i t 
00850  
00851  # u n d e f   p t h r e a d _ m u t e x _ t 
00852  
00853  # u n d e f   p t h r e a d _ c o n d _ w a i t 
00854  
00855  # u n d e f   p t h r e a d _ c o n d _ t i m e d w a i t 
00856  
00857  # u n d e f   p t h r e a d _ m u t e x _ t r y l o c k 
00858  
00859  # d e f i n e   p t h r e a d _ m u t e x _ i n i t ( A , B )   m y _ p t h r e a d _ f a s t m u t e x _ i n i t ( ( A ) , ( B ) ) 
00860  
00861  # d e f i n e   p t h r e a d _ m u t e x _ l o c k ( A )   m y _ p t h r e a d _ f a s t m u t e x _ l o c k ( A ) 
00862  
00863  # d e f i n e   p t h r e a d _ m u t e x _ u n l o c k ( A )   p t h r e a d _ m u t e x _ u n l o c k ( & ( A ) - > m u t e x ) 
00864  
00865  # d e f i n e   p t h r e a d _ m u t e x _ d e s t r o y ( A )   p t h r e a d _ m u t e x _ d e s t r o y ( & ( A ) - > m u t e x ) 
00866  
00867  # d e f i n e   p t h r e a d _ c o n d _ w a i t ( A , B )   p t h r e a d _ c o n d _ w a i t ( ( A ) , & ( B ) - > m u t e x ) 
00868  
00869  # d e f i n e   p t h r e a d _ c o n d _ t i m e d w a i t ( A , B , C )   p t h r e a d _ c o n d _ t i m e d w a i t ( ( A ) , & ( B ) - > m u t e x , ( C ) ) 
00870  
00871  # d e f i n e   p t h r e a d _ m u t e x _ t r y l o c k ( A )   p t h r e a d _ m u t e x _ t r y l o c k ( & ( A ) - > m u t e x ) 
00872  
00873  # d e f i n e   p t h r e a d _ m u t e x _ t   m y _ p t h r e a d _ f a s t m u t e x _ t 
00874  
00875  # e n d i f   / *   d e f i n e d ( M Y _ P T H R E A D _ F A S T M U T E X )   & &   ! d e f i n e d ( S A F E _ M U T E X )   * / 
00876  
00877      / *   R E A D - W R I T E   t h r e a d   l o c k i n g   * / 
00878  
00879  # i f d e f   H A V E _ B R O K E N _ R W L O C K           / *   F o r   O p e n U n i x   * / 
00880  
00881  # u n d e f   H A V E _ P T H R E A D _ R W L O C K _ R D L O C K 
00882  
00883  # u n d e f   H A V E _ R W L O C K _ I N I T 
00884  
00885  # u n d e f   H A V E _ R W L O C K _ T 
00886  
00887  # e n d i f 
00888  
00889  # i f   d e f i n e d ( U S E _ M U T E X _ I N S T E A D _ O F _ R W _ L O C K S ) 
00890  
00891  / *   u s e   t h e s e   d e f s   f o r   s i m p l e   m u t e x   l o c k i n g   * / 
00892  
00893  # d e f i n e   r w _ l o c k _ t   p t h r e a d _ m u t e x _ t 
00894  
00895  # d e f i n e   m y _ r w l o c k _ i n i t ( A , B )   p t h r e a d _ m u t e x _ i n i t ( ( A ) , ( B ) ) 
00896  
00897  # d e f i n e   r w _ r d l o c k ( A )   p t h r e a d _ m u t e x _ l o c k ( ( A ) ) 
00898  
00899  # d e f i n e   r w _ w r l o c k ( A )   p t h r e a d _ m u t e x _ l o c k ( ( A ) ) 
00900  
00901  # d e f i n e   r w _ t r y r d l o c k ( A )   p t h r e a d _ m u t e x _ t r y l o c k ( ( A ) ) 
00902  
00903  # d e f i n e   r w _ t r y w r l o c k ( A )   p t h r e a d _ m u t e x _ t r y l o c k ( ( A ) ) 
00904  
00905  # d e f i n e   r w _ u n l o c k ( A )   p t h r e a d _ m u t e x _ u n l o c k ( ( A ) ) 
00906  
00907  # d e f i n e   r w l o c k _ d e s t r o y ( A )   p t h r e a d _ m u t e x _ d e s t r o y ( ( A ) ) 
00908  
00909  # e l i f   d e f i n e d ( H A V E _ P T H R E A D _ R W L O C K _ R D L O C K ) 
00910  
00911  # d e f i n e   r w _ l o c k _ t   p t h r e a d _ r w l o c k _ t 
00912  
00913  # d e f i n e   m y _ r w l o c k _ i n i t ( A , B )   p t h r e a d _ r w l o c k _ i n i t ( ( A ) , ( B ) ) 
00914  
00915  # d e f i n e   r w _ r d l o c k ( A )   p t h r e a d _ r w l o c k _ r d l o c k ( A ) 
00916  
00917  # d e f i n e   r w _ w r l o c k ( A )   p t h r e a d _ r w l o c k _ w r l o c k ( A ) 
00918  
00919  # d e f i n e   r w _ t r y r d l o c k ( A )   p t h r e a d _ r w l o c k _ t r y r d l o c k ( ( A ) ) 
00920  
00921  # d e f i n e   r w _ t r y w r l o c k ( A )   p t h r e a d _ r w l o c k _ t r y w r l o c k ( ( A ) ) 
00922  
00923  # d e f i n e   r w _ u n l o c k ( A )   p t h r e a d _ r w l o c k _ u n l o c k ( A ) 
00924  
00925  # d e f i n e   r w l o c k _ d e s t r o y ( A )   p t h r e a d _ r w l o c k _ d e s t r o y ( A ) 
00926  
00927  # e l i f   d e f i n e d ( H A V E _ R W L O C K _ I N I T ) 
00928  
00929  # i f d e f   H A V E _ R W L O C K _ T                 / *   F o r   e x a m p l e   S o l a r i s   2 . 6 - >   * / 
00930  
00931  # d e f i n e   r w _ l o c k _ t   r w l o c k _ t 
00932  
00933  # e n d i f 
00934  
00935  # d e f i n e   m y _ r w l o c k _ i n i t ( A , B )   r w l o c k _ i n i t ( ( A ) , U S Y N C _ T H R E A D , 0 ) 
00936  
00937  # e l s e 
00938  
00939  / *   U s e   o u r   o w n   v e r s i o n   o f   r e a d / w r i t e   l o c k s   * / 
00940  
00941  t y p e d e f   s t r u c t   _ m y _ r w _ l o c k _ t   { 
00942  
00943      p t h r e a d _ m u t e x _ t   l o c k ;       / *   l o c k   f o r   s t r u c t u r e       * / 
00944  
00945      p t h r e a d _ c o n d _ t     r e a d e r s ;     / *   w a i t i n g   r e a d e r s         * / 
00946  
00947      p t h r e a d _ c o n d _ t     w r i t e r s ;     / *   w a i t i n g   w r i t e r s         * / 
00948  
00949      i n t       s t a t e ;         / *   - 1 : w r i t e r , 0 : f r e e , > 0 : r e a d e r s     * / 
00950  
00951      i n t       w a i t e r s ;     / *   n u m b e r   o f   w a i t i n g   w r i t e r s     * / 
00952  
00953  }   m y _ r w _ l o c k _ t ; 
00954  
00955  # d e f i n e   r w _ l o c k _ t   m y _ r w _ l o c k _ t 
00956  
00957  # d e f i n e   r w _ r d l o c k ( A )   m y _ r w _ r d l o c k ( ( A ) ) 
00958  
00959  # d e f i n e   r w _ w r l o c k ( A )   m y _ r w _ w r l o c k ( ( A ) ) 
00960  
00961  # d e f i n e   r w _ t r y r d l o c k ( A )   m y _ r w _ t r y r d l o c k ( ( A ) ) 
00962  
00963  # d e f i n e   r w _ t r y w r l o c k ( A )   m y _ r w _ t r y w r l o c k ( ( A ) ) 
00964  
00965  # d e f i n e   r w _ u n l o c k ( A )   m y _ r w _ u n l o c k ( ( A ) ) 
00966  
00967  # d e f i n e   r w l o c k _ d e s t r o y ( A )   m y _ r w l o c k _ d e s t r o y ( ( A ) ) 
00968  
00969  e x t e r n   i n t   m y _ r w l o c k _ i n i t ( m y _ r w _ l o c k _ t   * ,   v o i d   * ) ; 
00970  
00971  e x t e r n   i n t   m y _ r w l o c k _ d e s t r o y ( m y _ r w _ l o c k _ t   * ) ; 
00972  
00973  e x t e r n   i n t   m y _ r w _ r d l o c k ( m y _ r w _ l o c k _ t   * ) ; 
00974  
00975  e x t e r n   i n t   m y _ r w _ w r l o c k ( m y _ r w _ l o c k _ t   * ) ; 
00976  
00977  e x t e r n   i n t   m y _ r w _ u n l o c k ( m y _ r w _ l o c k _ t   * ) ; 
00978  
00979  e x t e r n   i n t   m y _ r w _ t r y r d l o c k ( m y _ r w _ l o c k _ t   * ) ; 
00980  
00981  e x t e r n   i n t   m y _ r w _ t r y w r l o c k ( m y _ r w _ l o c k _ t   * ) ; 
00982  
00983  # e n d i f   / *   U S E _ M U T E X _ I N S T E A D _ O F _ R W _ L O C K S   * / 
00984  
00985  # d e f i n e   G E T H O S T B Y A D D R _ B U F F _ S I Z E   2 0 4 8 
00986  
00987  # i f n d e f   H A V E _ T H R _ S E T C O N C U R R E N C Y 
00988  
00989  # d e f i n e   t h r _ s e t c o n c u r r e n c y ( A )   p t h r e a d _ d u m m y ( 0 ) 
00990  
00991  # e n d i f 
00992  
00993  # i f   ! d e f i n e d ( H A V E _ P T H R E A D _ A T T R _ S E T S T A C K S I Z E )   & &   !   d e f i n e d ( p t h r e a d _ a t t r _ s e t s t a c k s i z e ) 
00994  
00995  # d e f i n e   p t h r e a d _ a t t r _ s e t s t a c k s i z e ( A , B )   p t h r e a d _ d u m m y ( 0 ) 
00996  
00997  # e n d i f 
00998  
00999  / *   D e f i n e   m u t e x   t y p e s ,   s e e   m y _ t h r _ i n i t . c   * / 
01000  
01001  # d e f i n e   M Y _ M U T E X _ I N I T _ S L O W       N U L L 
01002  
01003  # i f d e f   P T H R E A D _ A D A P T I V E _ M U T E X _ I N I T I A L I Z E R _ N P 
01004  
01005  e x t e r n   p t h r e a d _ m u t e x a t t r _ t   m y _ f a s t _ m u t e x a t t r ; 
01006  
01007  # d e f i n e   M Y _ M U T E X _ I N I T _ F A S T   & m y _ f a s t _ m u t e x a t t r 
01008  
01009  # e l s e 
01010  
01011  # d e f i n e   M Y _ M U T E X _ I N I T _ F A S T       N U L L 
01012  
01013  # e n d i f 
01014  
01015  # i f d e f   P T H R E A D _ E R R O R C H E C K _ M U T E X _ I N I T I A L I Z E R _ N P 
01016  
01017  e x t e r n   p t h r e a d _ m u t e x a t t r _ t   m y _ e r r o r c h e c k _ m u t e x a t t r ; 
01018  
01019  # d e f i n e   M Y _ M U T E X _ I N I T _ E R R C H K   & m y _ e r r o r c h e c k _ m u t e x a t t r 
01020  
01021  # e l s e 
01022  
01023  # d e f i n e   M Y _ M U T E X _ I N I T _ E R R C H K       N U L L 
01024  
01025  # e n d i f 
01026  
01027  # i f n d e f   E S R C H 
01028  
01029  / *   D e f i n e   i t   t o   s o m e t h i n g   * / 
01030  
01031  # d e f i n e   E S R C H   1 
01032  
01033  # e n d i f 
01034  
01035  t y p e d e f   u l o n g   m y _ t h r e a d _ i d ; 
01036  
01037  e x t e r n   v o i d   m y _ t h r e a d a t t r _ g l o b a l _ i n i t ( v o i d ) ; 
01038  
01039  e x t e r n   m y _ b o o l   m y _ t h r e a d _ g l o b a l _ i n i t ( v o i d ) ; 
01040  
01041  e x t e r n   v o i d   m y _ t h r e a d _ g l o b a l _ e n d ( v o i d ) ; 
01042  
01043  e x t e r n   m y _ b o o l   m y _ t h r e a d _ i n i t ( v o i d ) ; 
01044  
01045  e x t e r n   v o i d   m y _ t h r e a d _ e n d ( v o i d ) ; 
01046  
01047  e x t e r n   c o n s t   c h a r   * m y _ t h r e a d _ n a m e ( v o i d ) ; 
01048  
01049  e x t e r n   m y _ t h r e a d _ i d   m y _ t h r e a d _ d b u g _ i d ( v o i d ) ; 
01050  
01051  e x t e r n   i n t   p t h r e a d _ d u m m y ( i n t ) ; 
01052  
01053  / *   A l l   t h r e a d   s p e c i f i c   v a r i a b l e s   a r e   i n   t h e   f o l l o w i n g   s t r u c t   * / 
01054  
01055  # d e f i n e   T H R E A D _ N A M E _ S I Z E   1 0 
01056  
01057  # i f n d e f   D E F A U L T _ T H R E A D _ S T A C K 
01058  
01059  # i f   S I Z E O F _ C H A R P   >   4 
01060  
01061  / * 
01062  
01063      M y S Q L   c a n   s u r v i v e   w i t h   3 2 K ,   b u t   s o m e   g l i b c   l i b r a r i e s   r e q u i r e   >   1 2 8 K   s t a c k 
01064  
01065      T o   r e s o l v e   h o s t n a m e s .   A l s o   r e c u r s i v e   s t o r e d   p r o c e d u r e s   n e e d s   s t a c k . 
01066  
01067  * / 
01068  
01069  # d e f i n e   D E F A U L T _ T H R E A D _ S T A C K     ( 2 5 6 * 1 0 2 4 L ) 
01070  
01071  # e l s e 
01072  
01073  # d e f i n e   D E F A U L T _ T H R E A D _ S T A C K     ( 1 9 5 * 1 0 2 4 ) 
01074  
01075  # e n d i f 
01076  
01077  # e n d i f 
01078  
01079  # d e f i n e   M Y _ P T H R E A D _ L O C K _ R E A D   0 
01080  
01081  # d e f i n e   M Y _ P T H R E A D _ L O C K _ W R I T E   1 
01082  
01083  s t r u c t   s t _ m y _ t h r e a d _ v a r 
01084  
01085  { 
01086  
01087      i n t   t h r _ e r r n o ; 
01088  
01089      p t h r e a d _ c o n d _ t   s u s p e n d ; 
01090  
01091      p t h r e a d _ m u t e x _ t   m u t e x ; 
01092  
01093      p t h r e a d _ m u t e x _ t   *   v o l a t i l e   c u r r e n t _ m u t e x ; 
01094  
01095      p t h r e a d _ c o n d _ t   *   v o l a t i l e   c u r r e n t _ c o n d ; 
01096  
01097      p t h r e a d _ t   p t h r e a d _ s e l f ; 
01098  
01099      m y _ t h r e a d _ i d   i d ; 
01100  
01101      i n t   c m p _ l e n g t h ; 
01102  
01103      i n t   v o l a t i l e   a b o r t ; 
01104  
01105      m y _ b o o l   i n i t ; 
01106  
01107      s t r u c t   s t _ m y _ t h r e a d _ v a r   * n e x t , * * p r e v ; 
01108  
01109      v o i d   * o p t _ i n f o ; 
01110  
01111      u i n t     l o c k _ t y p e ;   / *   u s e d   b y   c o n d i t i o n a l   r e l e a s e   t h e   q u e u e   * / 
01112  
01113      v o i d     * s t a c k _ e n d s _ h e r e ; 
01114  
01115      s a f e _ m u t e x _ t   * m u t e x _ i n _ u s e ; 
01116  
01117  # i f n d e f   D B U G _ O F F 
01118  
01119      v o i d   * d b u g ; 
01120  
01121      c h a r   n a m e [ T H R E A D _ N A M E _ S I Z E + 1 ] ; 
01122  
01123  # e n d i f 
01124  
01125  } ; 
01126  
01127  e x t e r n   s t r u c t   s t _ m y _ t h r e a d _ v a r   * _ m y _ t h r e a d _ v a r ( v o i d )   _ _ a t t r i b u t e _ _   ( ( c o n s t ) ) ; 
01128  
01129  e x t e r n   v o i d   * * m y _ t h r e a d _ v a r _ d b u g ( ) ; 
01130  
01131  e x t e r n   s a f e _ m u t e x _ t   * * m y _ t h r e a d _ v a r _ m u t e x _ i n _ u s e ( ) ; 
01132  
01133  e x t e r n   u i n t   m y _ t h r e a d _ e n d _ w a i t _ t i m e ; 
01134  
01135  e x t e r n   m y _ b o o l   s a f e _ m u t e x _ d e a d l o c k _ d e t e c t o r ; 
01136  
01137  # d e f i n e   m y _ t h r e a d _ v a r   ( _ m y _ t h r e a d _ v a r ( ) ) 
01138  
01139  # d e f i n e   m y _ e r r n o   m y _ t h r e a d _ v a r - > t h r _ e r r n o 
01140  
01141  / * 
01142  
01143      K e e p   t r a c k   o f   s h u t d o w n , s i g n a l ,   a n d   m a i n   t h r e a d s   s o   t h a t   m y _ e n d ( )   w i l l   n o t 
01144  
01145      r e p o r t   e r r o r s   w i t h   t h e m 
01146  
01147  * / 
01148  
01149  / *   W h i c h   k i n d   o f   t h r e a d   l i b r a r y   i s   i n   u s e   * / 
01150  
01151  # d e f i n e   T H D _ L I B _ O T H E R   1 
01152  
01153  # d e f i n e   T H D _ L I B _ N P T L     2 
01154  
01155  # d e f i n e   T H D _ L I B _ L T         4 
01156  
01157  e x t e r n   u i n t   t h d _ l i b _ d e t e c t e d ; 
01158  
01159  / * 
01160  
01161      t h r e a d _ s a f e _ x x x   f u n c t i o n s   a r e   f o r   c r i t i c a l   s t a t i s t i c   o r   c o u n t e r s . 
01162  
01163      T h e   i m p l e m e n t a t i o n   i s   g u a r a n t e e d   t o   b e   t h r e a d   s a f e ,   o n   a l l   p l a t f o r m s . 
01164  
01165      N o t e   t h a t   t h e   c a l l i n g   c o d e   s h o u l d   * n o t *   a s s u m e   t h e   c o u n t e r   i s   p r o t e c t e d 
01166  
01167      b y   t h e   m u t e x   g i v e n ,   a s   t h e   i m p l e m e n t a t i o n   o f   t h e s e   h e l p e r s   m a y   c h a n g e 
01168  
01169      t o   u s e   m y _ a t o m i c   o p e r a t i o n s   i n s t e a d . 
01170  
01171  * / 
01172  
01173  / * 
01174  
01175      W a r n i n g : 
01176  
01177      W h e n   c o m p i l i n g   w i t h o u t   t h r e a d s ,   t h i s   f i l e   i s   n o t   i n c l u d e d . 
01178  
01179      S e e   t h e   * o t h e r *   d e c l a r a t i o n s   o f   t h r e a d _ s a f e _ x x x   i n   i n c l u d e / m y _ g l o b a l . h 
01180  
01181      S e c o n d   w a r n i n g : 
01182  
01183      S e e   i n c l u d e / c o n f i g - w i n . h ,   f o r   y e t   a n o t h e r   i m p l e m e n t a t i o n . 
01184  
01185  * / 
01186  
01187  # i f d e f   T H R E A D 
01188  
01189  # i f n d e f   t h r e a d _ s a f e _ i n c r e m e n t 
01190  
01191  # d e f i n e   t h r e a d _ s a f e _ i n c r e m e n t ( V , L )   \ 
01192  
01193                  ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) ,   ( V ) + + ,   p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 
01194  
01195  # d e f i n e   t h r e a d _ s a f e _ d e c r e m e n t ( V , L )   \ 
01196  
01197                  ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) ,   ( V ) - - ,   p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 
01198  
01199  # e n d i f 
01200  
01201  # i f n d e f   t h r e a d _ s a f e _ a d d 
01202  
01203  # d e f i n e   t h r e a d _ s a f e _ a d d ( V , C , L )   \ 
01204  
01205                  ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) ,   ( V ) + = ( C ) ,   p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 
01206  
01207  # d e f i n e   t h r e a d _ s a f e _ s u b ( V , C , L )   \ 
01208  
01209                  ( p t h r e a d _ m u t e x _ l o c k ( ( L ) ) ,   ( V ) - = ( C ) ,   p t h r e a d _ m u t e x _ u n l o c k ( ( L ) ) ) 
01210  
01211  # e n d i f 
01212  
01213  # e n d i f 
01214  
01215  / * 
01216  
01217      s t a t i s t i c s _ x x x   f u n c t i o n s   a r e   f o r   n o n   c r i t i c a l   s t a t i s t i c , 
01218  
01219      m a i n t a i n e d   i n   g l o b a l   v a r i a b l e s . 
01220  
01221      W h e n   c o m p i l i n g   w i t h   S A F E _ S T A T I S T I C S : 
01222  
01223      -   r a c e   c o n d i t i o n s   c a n   n o t   o c c u r . 
01224  
01225      -   s o m e   l o c k i n g   o c c u r s ,   w h i c h   m a y   c a u s e   p e r f o r m a n c e   d e g r a d a t i o n . 
01226  
01227      W h e n   c o m p i l i n g   w i t h o u t   S A F E _ S T A T I S T I C S : 
01228  
01229      -   r a c e   c o n d i t i o n s   c a n   o c c u r ,   m a k i n g   t h e   r e s u l t   s l i g h t l y   i n a c c u r a t e . 
01230  
01231      -   t h e   l o c k   g i v e n   i s   n o t   h o n o r e d . 
01232  
01233  * / 
01234  
01235  # i f d e f   S A F E _ S T A T I S T I C S 
01236  
01237  # d e f i n e   s t a t i s t i c _ i n c r e m e n t ( V , L )   t h r e a d _ s a f e _ i n c r e m e n t ( ( V ) , ( L ) ) 
01238  
01239  # d e f i n e   s t a t i s t i c _ d e c r e m e n t ( V , L )   t h r e a d _ s a f e _ d e c r e m e n t ( ( V ) , ( L ) ) 
01240  
01241  # d e f i n e   s t a t i s t i c _ a d d ( V , C , L )           t h r e a d _ s a f e _ a d d ( ( V ) , ( C ) , ( L ) ) 
01242  
01243  # d e f i n e   s t a t i s t i c _ s u b ( V , C , L )           t h r e a d _ s a f e _ s u b ( ( V ) , ( C ) , ( L ) ) 
01244  
01245  # e l s e 
01246  
01247  # d e f i n e   s t a t i s t i c _ d e c r e m e n t ( V , L )   ( V ) - - 
01248  
01249  # d e f i n e   s t a t i s t i c _ i n c r e m e n t ( V , L )   ( V ) + + 
01250  
01251  # d e f i n e   s t a t i s t i c _ a d d ( V , C , L )           ( V ) + = ( C ) 
01252  
01253  # d e f i n e   s t a t i s t i c _ s u b ( V , C , L )           ( V ) - = ( C ) 
01254  
01255  # e n d i f   / *   S A F E _ S T A T I S T I C S   * / 
01256  
01257  / * 
01258  
01259      N o   l o c k i n g   n e e d e d ,   t h e   c o u n t e r   i s   o w n e d   b y   t h e   t h r e a d 
01260  
01261  * / 
01262  
01263  # d e f i n e   s t a t u s _ v a r _ i n c r e m e n t ( V )   ( V ) + + 
01264  
01265  # d e f i n e   s t a t u s _ v a r _ d e c r e m e n t ( V )   ( V ) - - 
01266  
01267  # d e f i n e   s t a t u s _ v a r _ a d d ( V , C )           ( V ) + = ( C ) 
01268  
01269  # d e f i n e   s t a t u s _ v a r _ s u b ( V , C )           ( V ) - = ( C ) 
01270  
01271  # i f d e f     _ _ c p l u s p l u s 
01272  
01273  } 
01274  
01275  # e n d i f 
01276  
01277  # e n d i f   / *   _ m y _ p t r e a d _ h   * / 
01278  
01279  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义