【发布时间】:2010-10-28 02:17:41
【问题描述】:
在 Objective C 中有没有一种方法可以定义一个线程安全的静态 int?
例如,如果我有一个名为 Session 的类:
static unsigned int session_id = 1000;
- (int) generateSessionID{
return session_id++;
}
我正在从不同的线程构造会话对象,每个会话对象 应该有一个唯一的ID。
【问题讨论】:
-
您需要使用某种锁定语义。问题是您希望操作是原子的。但请记住,“++”根本不是原子的,它是一次几个操作。
-
然后可以用 synchronized(self){return session_id++} 包围我的返回 session_id++。但是我不确定这是否会锁定类或它自己的对象。
-
如所写,它会锁定实例,而不是类(不是你想要的)。也许是“
@synchronized([self class])”? -
@David Gelhar:不,不要在
[self class]上同步,因为子类的实例会在不同的类对象上同步。在显式类上同步,例如[MyClass class]