我想在一个ivar中保持一个与其血统共享的根块中的记录。结果值不用于兄弟姐妹,而是用于不同的对象谱系。标量是
@property (assign) NSUInteger ceil;
并且正常合成为
@synthesize ceil;
但只能通过合成的住房对象访问(更新):
- (NSUInteger)nextCeil
{
NSUInteger nextCeil = 0;
// The root (date) agenda keeps the master. When we fetch
// another ceil we clone it for our use as well. Later we
// can access this value in case we need to diagnose.
@synchronized (self)
{
// If we have a root go up there for value
if (root)
{
nextCeil = [root nextCeil];
}
else
{
nextCeil = ++ceil;
}
}
return nextCeil;
}
我的问题是,鉴于多线程的环境,这是安全/正确的吗?到目前为止,我没有遇到任何问题。
设计历史是这个根是其兄弟姐妹的核心,它有一个日期参考,根是以日为中心,而兄弟姐妹是以时间为中心的。为了唯一性,每天需要一个计数器,分配给以时间为中心的物体,但不存储在那里。
答案 0 :(得分:0)
这可能没问题,但Apple似乎在他们的Thread Programming Guide中留下了怀疑的余地,包括说明:
注意:大多数类型的锁还包含一个内存屏障,以确保在进入关键部分之前完成任何先前的加载和存储指令
大多数?如果这涉及到您使用同一文档中涵盖的屏障的原子增量。
当然,除非您将这些方法用于对您的ivar的所有访问,否则这些方法都不安全。
HTH