(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 | [_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 | [_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
- What is a read-write lock: http://en.wikipedia.org/wiki/Read/write_lock_pattern
- Header: http://ericasadun.com/iPhoneDocs300/_n_s_multi_read_uni_write_lock_8h-source.html
|