00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SNDCONDITIONLOCK_H__
00022 #define __SNDCONDITIONLOCK_H__
00023
00024 #ifdef __MINGW32__
00025
00026 #import <windows.h>
00027 #import <Foundation/Foundation.h>
00028
00029
00030 typedef struct
00031 {
00032 int waiters_count_;
00033
00034
00035 CRITICAL_SECTION waiters_count_lock_;
00036
00037
00038 HANDLE sema_;
00039
00040
00041
00042 HANDLE waiters_done_;
00043
00044
00045
00046
00047 size_t was_broadcast_;
00048
00049
00050 } pthread_cond_t;
00051
00052 typedef HANDLE pthread_mutex_t;
00053
00054
00055
00065 @interface SndConditionLock : NSObject <NSLocking, GCFinalization>
00066 {
00067 @private
00068 objc_condition_t _condition;
00069 objc_mutex_t _mutex;
00070 int _condition_value;
00071 }
00072
00073
00074
00075
00076 - (void) lock;
00077 - (void) unlock;
00078
00079
00080
00081
00082 - (id) initWithCondition: (int)value;
00083
00084
00085
00086
00087 - (int) condition;
00088
00089
00090
00091
00092 - (void) lockWhenCondition: (int)value;
00093 - (void) unlockWithCondition: (int)value;
00094 - (BOOL) tryLock;
00095 - (BOOL) tryLockWhenCondition: (int)value;
00096
00097
00098
00099
00100 - (BOOL) lockBeforeDate: (NSDate*)limit;
00101 - (BOOL) lockWhenCondition: (int)condition
00102 beforeDate: (NSDate*)limit;
00103
00104 - (void) lock;
00105 - (void) unlock;
00106
00107 @end
00108
00109 #endif
00110
00111 #endif