Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/html/extensions/Variables/includes/ExtVariables.php on line 198
NSMultiReadUniWriteLock: Difference between revisions - iPhone Development Wiki

NSMultiReadUniWriteLock: Difference between revisions

From iPhone Development Wiki
(Created page with 'NSMultiReadUniWriteLock is an Objective-C wrapper of the POSIX read-write lock (<tt>pthread_rwlock_t</tt>), for example, <source lang="objc"> @interface threadSafeMutableDict…')
 
mNo edit summary
 
Line 20: Line 20:
...
...
-(void)setObject:(id)obj forKey:(id)key {
-(void)setObject:(id)obj forKey:(id)key {
   [_rwlock tryLockForWriting];
   [_rwlock lockForWriting];
   [_dict setObject:obj forKey:key];
   [_dict setObject:obj forKey:key];
   [_rwlock unlock];
   [_rwlock unlock];
}
}
-(id)objectForKey:(id)key {
-(id)objectForKey:(id)key {
   [_rwlock tryLockForReading];
   [_rwlock lockForReading];
   id obj = [_dict objectForKey:key];
   id obj = [_dict objectForKey:key];
   [_rwlock unlock];
   [_rwlock unlock];

Latest revision as of 14:43, 28 October 2009

NSMultiReadUniWriteLock is an Objective-C wrapper of the POSIX read-write lock (pthread_rwlock_t), for example,

@interface threadSafeMutableDictionary {
  NSMutableDictionary* _dict;
  NSMultiReadUniWriteLock* _rwlock;
}
-(void)setObject:(id)obj forKey:(id)key;
-(id)objectForKey:(id)key;
...
@end

@implementation threadSafeMutableDictionary
-(id)init {
  if ((self = [super init])) {
    _rwlock = [[NSMultiReadUniWriteLock alloc] init];
    ...
  }
  return self;
}
...
-(void)setObject:(id)obj forKey:(id)key {
  [_rwlock lockForWriting];
  [_dict setObject:obj forKey:key];
  [_rwlock unlock];
}
-(id)objectForKey:(id)key {
  [_rwlock lockForReading];
  id obj = [_dict objectForKey:key];
  [_rwlock unlock];
  return obj;
}
@end

Note that -lockForReadingBeforeDate: and -lockForWritingBeforeDate: are currently implemented as a no-op.

References