Sử dụng @syncrhonized(obj)
chỉ cần tạo khóa để mã khác đồng bộ hóa trên obj
sẽ không thực thi cùng một lúc.
Thuộc tính nguyên tử hoạt động bằng cách không cho phép thay đổi được thực hiện khi thuộc tính đang được truy cập; chúng cung cấp khóa ẩn để truy cập.
array = someObject.array; //locked
[array doSomething]; //no longer locked
Bạn không có thể ghi đè getter và setter cho atomic
tài sản, nhưng sử dụng @sycnronized
chỉ quanh getter/setter nên là đủ.
@synthesize array=_array;
...
-(void)setArray
{
@synchronized(self)
{
_array = array;
}
}
-(NSArray *)array
{
NSArray *retVal;
@synchronized(self)
{
retVal = _array;
}
return retVal;
}
Thành thật mà nói, trừ khi bạn đang thực hiện một số chương trình đa luồng nghiêm túc, các thuộc tính nguyên tử là không cần thiết và chỉ gây ra các lần truy cập hiệu suất.
Nguồn
2012-05-08 16:23:41
Hoặc, tốt hơn, hãy sử dụng mẫu trình ghi đọc, một hàng đợi đồng thời GCD, thực hiện các lần đọc với 'dispatch_sync' và viết với' dispatch_barrier_async'. – Rob