00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _OSL_INTERLOCK_H_
00021 #define _OSL_INTERLOCK_H_
00022
00023 #include "sal/config.h"
00024
00025 #include "sal/saldllapi.h"
00026 #include "sal/types.h"
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 typedef sal_Int32 oslInterlockedCount;
00033
00038 SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount);
00039
00044 SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount);
00045
00046
00048
00059 #if defined( HAVE_GCC_BUILTIN_ATOMIC )
00060 # define osl_atomic_increment(p) __sync_add_and_fetch((p), 1)
00061 #else
00062 # define osl_atomic_increment(p) osl_incrementInterlockedCount((p))
00063 #endif
00064
00065
00076 #if defined( HAVE_GCC_BUILTIN_ATOMIC )
00077 # define osl_atomic_decrement(p) __sync_sub_and_fetch((p), 1)
00078 #else
00079 # define osl_atomic_decrement(p) osl_decrementInterlockedCount((p))
00080 #endif
00081
00083
00084 #ifdef __cplusplus
00085 }
00086 #endif
00087
00088
00089 #endif
00090
00091
00092