Thread-safe variables statiques objective c

Est-il une manière objective C que je peux définir un static int qui est thread-safe?

par exemple si j'ai de la classe appelée Session:

static unsigned int session_id = 1000;

- (int) generateSessionID{
        return session_id++;
}

Je suis la construction d'objets de session à partir de threads différents, chaque objet session
doit avoir un id unique.

  • Vous avez besoin d'utiliser une sorte de sémantique de verrouillage. Le problème est que vous voulez l'opération atomique. Mais gardez à l'esprit que "++" n'est pas atomique, c'est un peu d'opérations à la fois.
  • est possible alors d'entourer mon retour session_id++ avec synchronisée(self){return session_id++}. Cependant, je ne suis pas sûr si cela va de verrouillage de la classe ou de l'objet lui-même.
  • comme l'a écrit, il serait de verrouillage de l'instance, et non pas la classe (pas ce que vous voulez). Peut-être "@synchronized([self class])"?
  • Gelhar: non, ne pas synchroniser sur [self class] parce que les instances de sous-classes synchroniser sur différents objets de la classe. Synchroniser sur un explicite de la classe par exemple [MyClass class]
InformationsquelleAutor Unis | 2010-10-28