CMGDK r49-rc2
K:/CMGDKv18/SDK/Source/SQL/MySQL/include/my_atomic.h
浏览该文件的文档。
00001 / *   C o p y r i g h t   ( C )   2 0 0 6   M y S Q L   A B 
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  / * 
00024  
00025      T h i s   h e a d e r   d e f i n e s   f i v e   a t o m i c   o p e r a t i o n s : 
00026  
00027      m y _ a t o m i c _ a d d # ( & v a r ,   w h a t ) 
00028  
00029          a d d   ' w h a t '   t o   * v a r ,   a n d   r e t u r n   t h e   o l d   v a l u e   o f   * v a r 
00030  
00031      m y _ a t o m i c _ f a s # ( & v a r ,   w h a t ) 
00032  
00033          ' F e t c h   A n d   S t o r e ' 
00034  
00035          s t o r e   ' w h a t '   i n   * v a r ,   a n d   r e t u r n   t h e   o l d   v a l u e   o f   * v a r 
00036  
00037      m y _ a t o m i c _ c a s # ( & v a r ,   & o l d ,   n e w ) 
00038  
00039          ' C o m p a r e   A n d   S w a p ' 
00040  
00041          i f   * v a r   i s   e q u a l   t o   * o l d ,   t h e n   s t o r e   ' n e w '   i n   * v a r ,   a n d   r e t u r n   T R U E 
00042  
00043          o t h e r w i s e   s t o r e   * v a r   i n   * o l d ,   a n d   r e t u r n   F A L S E 
00044  
00045      m y _ a t o m i c _ l o a d # ( & v a r ) 
00046  
00047          r e t u r n   * v a r 
00048  
00049      m y _ a t o m i c _ s t o r e # ( & v a r ,   w h a t ) 
00050  
00051          s t o r e   ' w h a t '   i n   * v a r 
00052  
00053      ' # '   i s   s u b s t i t u t e d   b y   a   s i z e   s u f f i x   -   8 ,   1 6 ,   3 2 ,   o r   p t r 
00054  
00055      ( e . g .   m y _ a t o m i c _ a d d 8 ,   m y _ a t o m i c _ f a s 3 2 ,   m y _ a t o m i c _ c a s p t r ) . 
00056  
00057      N O T E   T h i s   o p e r a t i o n s   a r e   n o t   a l w a y s   a t o m i c ,   s o   t h e y   a l w a y s   m u s t   b e 
00058  
00059      e n c l o s e d   i n   m y _ a t o m i c _ r w l o c k _ r d l o c k ( l o c k ) / m y _ a t o m i c _ r w l o c k _ r d u n l o c k ( l o c k ) 
00060  
00061      o r   m y _ a t o m i c _ r w l o c k _ w r l o c k ( l o c k ) / m y _ a t o m i c _ r w l o c k _ w r u n l o c k ( l o c k ) . 
00062  
00063      H i n t :   i f   a   c o d e   b l o c k   m a k e s   i n t e n s i v e   u s e   o f   a t o m i c   o p s ,   i t   m a k e   s e n s e 
00064  
00065      t o   t a k e / r e l e a s e   r w l o c k   o n c e   f o r   t h e   w h o l e   b l o c k ,   n o t   f o r   e v e r y   s t a t e m e n t . 
00066  
00067      O n   a r c h i t e c t u r e s   w h e r e   t h e s e   o p e r a t i o n s   a r e   r e a l l y   a t o m i c ,   r w l o c k s   w i l l 
00068  
00069      b e   o p t i m i z e d   a w a y . 
00070  
00071      8 -   a n d   1 6 - b i t   a t o m i c s   a r e n ' t   i m p l e m e n t e d   f o r   w i n d o w s   ( s e e   g e n e r i c - m s v c . h ) , 
00072  
00073      b u t   c a n   b e   a d d e d ,   i f   n e c e s s a r y .   
00074  
00075  * / 
00076  
00077  # i f n d e f   m y _ a t o m i c _ r w l o c k _ i n i t 
00078  
00079  # d e f i n e   i n t p t r                   v o i d   * 
00080  
00081  # i f n d e f   M Y _ A T O M I C _ M O D E _ R W L O C K S 
00082  
00083  # i n c l u d e   " a t o m i c / n o l o c k . h " 
00084  
00085  # e n d i f 
00086  
00087  # i f n d e f   m a k e _ a t o m i c _ c a s _ b o d y 
00088  
00089  / *   n o l o c k . h   w a s   n o t   a b l e   t o   g e n e r a t e   e v e n   a   C A S   f u n c t i o n ,   f a l l   b a c k   * / 
00090  
00091  # i n c l u d e   " a t o m i c / r w l o c k . h " 
00092  
00093  # e l s e 
00094  
00095  / *   d e f i n e   m i s s i n g   f u n c t i o n s   b y   u s i n g   t h e   a l r e a d y   g e n e r a t e d   o n e s   * / 
00096  
00097  # i f n d e f   m a k e _ a t o m i c _ a d d _ b o d y 
00098  
00099  # d e f i n e   m a k e _ a t o m i c _ a d d _ b o d y ( S )                                                                   \ 
00100  
00101      i n t   # #   S   t m p = * a ;                                                                                             \ 
00102  
00103      w h i l e   ( ! m y _ a t o m i c _ c a s   # #   S ( a ,   & t m p ,   t m p + v ) ) ;                                     \ 
00104  
00105      v = t m p ; 
00106  
00107  # e n d i f 
00108  
00109  # i f n d e f   m a k e _ a t o m i c _ f a s _ b o d y 
00110  
00111  # d e f i n e   m a k e _ a t o m i c _ f a s _ b o d y ( S )                                                                   \ 
00112  
00113      i n t   # #   S   t m p = * a ;                                                                                             \ 
00114  
00115      w h i l e   ( ! m y _ a t o m i c _ c a s   # #   S ( a ,   & t m p ,   v ) ) ;                                             \ 
00116  
00117      v = t m p ; 
00118  
00119  # e n d i f 
00120  
00121  # i f n d e f   m a k e _ a t o m i c _ l o a d _ b o d y 
00122  
00123  # d e f i n e   m a k e _ a t o m i c _ l o a d _ b o d y ( S )                                                                 \ 
00124  
00125      r e t =   0 ;   / *   a v o i d   c o m p i l e r   w a r n i n g   * /                                                     \ 
00126  
00127      ( v o i d ) ( m y _ a t o m i c _ c a s   # #   S ( a ,   & r e t ,   r e t ) ) ; 
00128  
00129  # e n d i f 
00130  
00131  # i f n d e f   m a k e _ a t o m i c _ s t o r e _ b o d y 
00132  
00133  # d e f i n e   m a k e _ a t o m i c _ s t o r e _ b o d y ( S )                                                               \ 
00134  
00135      ( v o i d ) ( m y _ a t o m i c _ f a s   # #   S   ( a ,   v ) ) ; 
00136  
00137  # e n d i f 
00138  
00139  # e n d i f 
00140  
00141  / * 
00142  
00143      t r a n s p a r e n t _ u n i o n   d o e s n ' t   w o r k   i n   g + + 
00144  
00145      B u g   ? 
00146  
00147      D a r w i n ' s   g c c   d o e s n ' t   w a n t   t o   p u t   p o i n t e r s   i n   a   t r a n s p a r e n t _ u n i o n 
00148  
00149      w h e n   b u i l t   w i t h   - a r c h   p p c 6 4 .   C o m p l a i n s : 
00150  
00151      w a r n i n g :   ' t r a n s p a r e n t _ u n i o n '   a t t r i b u t e   i g n o r e d 
00152  
00153  * / 
00154  
00155  # i f   d e f i n e d ( _ _ G N U C _ _ )   & &   ! d e f i n e d ( _ _ c p l u s p l u s )   & &   \ 
00156  
00157              !   ( d e f i n e d ( _ _ A P P L E _ _ )   & &   d e f i n e d ( _ A R C H _ P P C 6 4 ) ) 
00158  
00159  / * 
00160  
00161      w e   w a n t   t o   b e   a b l e   t o   u s e   m y _ a t o m i c _ x x x   f u n c t i o n s   w i t h 
00162  
00163      b o t h   s i g n e d   a n d   u n s i g n e d   i n t e g e r s .   B u t   g c c   w i l l   i s s u e   a   w a r n i n g 
00164  
00165      " p a s s i n g   a r g   N   o f   ` m y _ a t o m i c _ X X X '   a s   [ u n ] s i g n e d   d u e   t o   p r o t o t y p e " 
00166  
00167      i f   t h e   s i g n e d n e s s   o f   t h e   a r g u m e n t   d o e s n ' t   m a t c h   t h e   p r o t o t y p e ,   o r 
00168  
00169      " p o i n t e r   t a r g e t s   i n   p a s s i n g   a r g u m e n t   N   o f   m y _ a t o m i c _ X X X   d i f f e r   i n   s i g n e d n e s s " 
00170  
00171      i f   i n t *   i s   u s e d   w h e r e   u i n t *   i s   e x p e c t e d   ( o r   v i c e   v e r s a ) . 
00172  
00173      L e t ' s   s h u t   t h e s e   w a r n i n g s   u p 
00174  
00175  * / 
00176  
00177  # d e f i n e   m a k e _ t r a n s p a r e n t _ u n i o n s ( S )                                                             \ 
00178  
00179                  t y p e d e f   u n i o n   {                                                                                   \ 
00180  
00181                      i n t     # #   S     i ;                                                                                   \ 
00182  
00183                      u i n t   # #   S     u ;                                                                                   \ 
00184  
00185                  }   U _   # #   S       _ _ a t t r i b u t e _ _   ( ( t r a n s p a r e n t _ u n i o n ) ) ;                 \ 
00186  
00187                  t y p e d e f   u n i o n   {                                                                                   \ 
00188  
00189                      i n t     # #   S   v o l a t i l e   * i ;                                                                 \ 
00190  
00191                      u i n t   # #   S   v o l a t i l e   * u ;                                                                 \ 
00192  
00193                  }   U v _   # #   S       _ _ a t t r i b u t e _ _   ( ( t r a n s p a r e n t _ u n i o n ) ) ; 
00194  
00195  # d e f i n e   u i n t p t r   i n t p t r 
00196  
00197  m a k e _ t r a n s p a r e n t _ u n i o n s ( 8 ) 
00198  
00199  m a k e _ t r a n s p a r e n t _ u n i o n s ( 1 6 ) 
00200  
00201  m a k e _ t r a n s p a r e n t _ u n i o n s ( 3 2 ) 
00202  
00203  m a k e _ t r a n s p a r e n t _ u n i o n s ( p t r ) 
00204  
00205  # u n d e f   u i n t p t r 
00206  
00207  # u n d e f   m a k e _ t r a n s p a r e n t _ u n i o n s 
00208  
00209  # d e f i n e   a               U _ a . i 
00210  
00211  # d e f i n e   c m p           U _ c m p . i 
00212  
00213  # d e f i n e   v               U _ v . i 
00214  
00215  # d e f i n e   s e t           U _ s e t . i 
00216  
00217  # e l s e 
00218  
00219  # d e f i n e   U _ 3 2       i n t 3 2 
00220  
00221  # d e f i n e   U _ p t r     i n t p t r 
00222  
00223  # d e f i n e   U v _ 3 2     i n t 3 2 
00224  
00225  # d e f i n e   U v _ p t r   i n t p t r 
00226  
00227  # d e f i n e   U _ a         v o l a t i l e   * a 
00228  
00229  # d e f i n e   U _ c m p     * c m p 
00230  
00231  # d e f i n e   U _ v         v 
00232  
00233  # d e f i n e   U _ s e t     s e t 
00234  
00235  # e n d i f   / *   _ _ G C C _ _   t r a n s p a r e n t _ u n i o n   m a g i c   * / 
00236  
00237  # i f d e f   H A V E _ I N L I N E 
00238  
00239  # d e f i n e   m a k e _ a t o m i c _ c a s ( S )                                                                             \ 
00240  
00241  S T A T I C _ I N L I N E   i n t   m y _ a t o m i c _ c a s   # #   S ( U v _   # #   S   U _ a ,                             \ 
00242  
00243                                                          U v _   # #   S   U _ c m p ,   U _   # #   S   U _ s e t )             \ 
00244  
00245  {                                                                                                                               \ 
00246  
00247      i n t 8   r e t ;                                                                                                           \ 
00248  
00249      m a k e _ a t o m i c _ c a s _ b o d y ( S ) ;                                                                             \ 
00250  
00251      r e t u r n   r e t ;                                                                                                       \ 
00252  
00253  } 
00254  
00255  # d e f i n e   m a k e _ a t o m i c _ a d d ( S )                                                                             \ 
00256  
00257  S T A T I C _ I N L I N E   i n t   # #   S   m y _ a t o m i c _ a d d   # #   S (                                             \ 
00258  
00259                                                  U v _   # #   S   U _ a ,   U _   # #   S   U _ v )                             \ 
00260  
00261  {                                                                                                                               \ 
00262  
00263      m a k e _ a t o m i c _ a d d _ b o d y ( S ) ;                                                                             \ 
00264  
00265      r e t u r n   v ;                                                                                                           \ 
00266  
00267  } 
00268  
00269  # d e f i n e   m a k e _ a t o m i c _ f a s ( S )                                                                             \ 
00270  
00271  S T A T I C _ I N L I N E   i n t   # #   S   m y _ a t o m i c _ f a s   # #   S (                                             \ 
00272  
00273                                                    U v _   # #   S   U _ a ,   U _   # #   S   U _ v )                           \ 
00274  
00275  {                                                                                                                               \ 
00276  
00277      m a k e _ a t o m i c _ f a s _ b o d y ( S ) ;                                                                             \ 
00278  
00279      r e t u r n   v ;                                                                                                           \ 
00280  
00281  } 
00282  
00283  # d e f i n e   m a k e _ a t o m i c _ l o a d ( S )                                                                           \ 
00284  
00285  S T A T I C _ I N L I N E   i n t   # #   S   m y _ a t o m i c _ l o a d   # #   S ( U v _   # #   S   U _ a )                 \ 
00286  
00287  {                                                                                                                               \ 
00288  
00289      i n t   # #   S   r e t ;                                                                                                   \ 
00290  
00291      m a k e _ a t o m i c _ l o a d _ b o d y ( S ) ;                                                                           \ 
00292  
00293      r e t u r n   r e t ;                                                                                                       \ 
00294  
00295  } 
00296  
00297  # d e f i n e   m a k e _ a t o m i c _ s t o r e ( S )                                                                         \ 
00298  
00299  S T A T I C _ I N L I N E   v o i d   m y _ a t o m i c _ s t o r e   # #   S (                                                 \ 
00300  
00301                                            U v _   # #   S   U _ a ,   U _   # #   S   U _ v )                                   \ 
00302  
00303  {                                                                                                                               \ 
00304  
00305      m a k e _ a t o m i c _ s t o r e _ b o d y ( S ) ;                                                                         \ 
00306  
00307  } 
00308  
00309  # e l s e   / *   n o   i n l i n e   f u n c t i o n s   * / 
00310  
00311  # d e f i n e   m a k e _ a t o m i c _ a d d ( S )                                                                             \ 
00312  
00313  e x t e r n   i n t   # #   S   m y _ a t o m i c _ a d d   # #   S ( U v _   # #   S   U _ a ,   U _   # #   S   U _ v ) ; 
00314  
00315  # d e f i n e   m a k e _ a t o m i c _ f a s ( S )                                                                             \ 
00316  
00317  e x t e r n   i n t   # #   S   m y _ a t o m i c _ f a s   # #   S ( U v _   # #   S   U _ a ,   U _   # #   S   U _ v ) ; 
00318  
00319  # d e f i n e   m a k e _ a t o m i c _ c a s ( S )                                                                             \ 
00320  
00321  e x t e r n   i n t   m y _ a t o m i c _ c a s   # #   S ( U v _   # #   S   U _ a ,   U v _   # #   S   U _ c m p ,   U _   # #   S   U _ s e t ) ; 
00322  
00323  # d e f i n e   m a k e _ a t o m i c _ l o a d ( S )                                                                           \ 
00324  
00325  e x t e r n   i n t   # #   S   m y _ a t o m i c _ l o a d   # #   S ( U v _   # #   S   U _ a ) ; 
00326  
00327  # d e f i n e   m a k e _ a t o m i c _ s t o r e ( S )                                                                         \ 
00328  
00329  e x t e r n   v o i d   m y _ a t o m i c _ s t o r e   # #   S ( U v _   # #   S   U _ a ,   U _   # #   S   U _ v ) ; 
00330  
00331  # e n d i f 
00332  
00333  m a k e _ a t o m i c _ c a s ( 3 2 ) 
00334  
00335  m a k e _ a t o m i c _ c a s ( p t r ) 
00336  
00337  m a k e _ a t o m i c _ a d d ( 3 2 ) 
00338  
00339  m a k e _ a t o m i c _ l o a d ( 3 2 ) 
00340  
00341  m a k e _ a t o m i c _ l o a d ( p t r ) 
00342  
00343  m a k e _ a t o m i c _ f a s ( 3 2 ) 
00344  
00345  m a k e _ a t o m i c _ f a s ( p t r ) 
00346  
00347  m a k e _ a t o m i c _ s t o r e ( 3 2 ) 
00348  
00349  m a k e _ a t o m i c _ s t o r e ( p t r ) 
00350  
00351  # i f d e f   _ a t o m i c _ h _ c l e a n u p _ 
00352  
00353  # i n c l u d e   _ a t o m i c _ h _ c l e a n u p _ 
00354  
00355  # u n d e f   _ a t o m i c _ h _ c l e a n u p _ 
00356  
00357  # e n d i f 
00358  
00359  # u n d e f   U _ 3 2 
00360  
00361  # u n d e f   U _ p t r 
00362  
00363  # u n d e f   a 
00364  
00365  # u n d e f   c m p 
00366  
00367  # u n d e f   v 
00368  
00369  # u n d e f   s e t 
00370  
00371  # u n d e f   U _ a 
00372  
00373  # u n d e f   U _ c m p 
00374  
00375  # u n d e f   U _ v 
00376  
00377  # u n d e f   U _ s e t 
00378  
00379  # u n d e f   m a k e _ a t o m i c _ a d d 
00380  
00381  # u n d e f   m a k e _ a t o m i c _ c a s 
00382  
00383  # u n d e f   m a k e _ a t o m i c _ l o a d 
00384  
00385  # u n d e f   m a k e _ a t o m i c _ s t o r e 
00386  
00387  # u n d e f   m a k e _ a t o m i c _ f a s 
00388  
00389  # u n d e f   m a k e _ a t o m i c _ a d d _ b o d y 
00390  
00391  # u n d e f   m a k e _ a t o m i c _ c a s _ b o d y 
00392  
00393  # u n d e f   m a k e _ a t o m i c _ l o a d _ b o d y 
00394  
00395  # u n d e f   m a k e _ a t o m i c _ s t o r e _ b o d y 
00396  
00397  # u n d e f   m a k e _ a t o m i c _ f a s _ b o d y 
00398  
00399  # u n d e f   i n t p t r 
00400  
00401  / * 
00402  
00403      t h e   m a c r o   b e l o w   d e f i n e s   ( a s   a n   e x p r e s s i o n )   t h e   c o d e   t h a t 
00404  
00405      w i l l   b e   r u n   i n   s p i n - l o o p s .   I n t e l   m a n u a l s   r e c u m m e n d   t o   h a v e   P A U S E   t h e r e . 
00406  
00407      I t   i s   e x p e c t e d   t o   b e   d e f i n e d   i n   i n c l u d e / a t o m i c /   * . h   f i l e s 
00408  
00409  * / 
00410  
00411  # i f n d e f   L F _ B A C K O F F 
00412  
00413  # d e f i n e   L F _ B A C K O F F   ( 1 ) 
00414  
00415  # e n d i f 
00416  
00417  # d e f i n e   M Y _ A T O M I C _ O K               0 
00418  
00419  # d e f i n e   M Y _ A T O M I C _ N O T _ 1 C P U   1 
00420  
00421  e x t e r n   i n t   m y _ a t o m i c _ i n i t i a l i z e ( ) ; 
00422  
00423  # e n d i f 
00424  
00425  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义