Eine threadsichere statische Variablen Ziel c

Gibt es eine Möglichkeit in objective C kann ich definieren einer statischen int, das ist thread-sicher?

zum Beispiel, wenn ich die Klasse genannt-Sitzung:

static unsigned int session_id = 1000;

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

Ich bin konstruieren session-Objekte aus verschiedenen threads, jedes session-Objekt
sollte eine eindeutige id.

  • Müssen Sie irgendeine Art von sperren Semantik. Das Problem ist Sie wollen die operation atomar. Aber Bedenken Sie, dass "++" ist nicht atomar, es ist ein paar Operationen auf einmal.
  • möglich ist dann, surround meiner Rückkehr session_id++ mit synchronized(self){return session_id++}. Allerdings bin ich nicht sicher, ob diese sperren, die Klasse oder das Objekt, das es selbst.
  • wie geschrieben, es würde sperren Sie die Instanz, nicht die Klasse (nicht das, was Sie wollen). Vielleicht "@synchronized([self class])"?
  • Gelhar: Nein, synchronisieren nicht auf [self class] weil Instanzen von Unterklassen würde synchronisieren, die auf unterschiedliche Objekte der Klasse. Synchronisieren auf eine explizite Klasse z.B. [MyClass class]
InformationsquelleAutor Unis | 2010-10-28
Schreibe einen Kommentar