2 * critical-sections.h: Critical sections
5 * Dick Porter (dick@ximian.com)
7 * (C) 2002 Ximian, Inc.
10 #ifndef _WAPI_CRITICAL_SECTIONS_H_
11 #define _WAPI_CRITICAL_SECTIONS_H_
16 #include "mono-mutex.h"
20 typedef struct _WapiCriticalSection WapiCriticalSection
;
22 struct _WapiCriticalSection
28 extern void InitializeCriticalSection(WapiCriticalSection
*section
);
29 extern gboolean
InitializeCriticalSectionAndSpinCount(WapiCriticalSection
*section
, guint32 spincount
);
30 extern void DeleteCriticalSection(WapiCriticalSection
*section
);
31 extern guint32
SetCriticalSectionSpinCount(WapiCriticalSection
*section
, guint32 spincount
);
32 extern gboolean
TryEnterCriticalSection(WapiCriticalSection
*section
);
34 /* These two are perf critical so avoid the wrapper function */
36 #define EnterCriticalSection(section) do { \
37 int ret = mono_mutex_lock(&(section)->mutex); \
39 g_warning ("Bad call to mono_mutex_lock result %d", ret); \
40 g_assert (ret == 0); \
43 #define LeaveCriticalSection(section) do { \
44 int ret = mono_mutex_unlock(&(section)->mutex); \
46 g_warning ("Bad call to mono_mutex_unlock result %d", ret); \
47 g_assert (ret == 0); \
52 #endif /* _WAPI_CRITICAL_SECTIONS_H_ */