2012-02-10 5 views
0

Je suis en train de définir une variable dans un thread, et je vérifie l'utiliser pour une condition dans un autre thread.jeu de variables & Get, condition de course

Je connais les conditions de concurrence ici. Mais pas sûr si faire l'ensemble de manière atomique suffira.

Pouvez-vous s'il vous plaît laissez-moi savoir comment résoudre ce problème en objectif-c.

MISE À JOUR: S'il vous plaît laissez-moi aussi savoir comment le faire pour une variable globale.

Répondre

1

De nombreuses solutions à ce problème généralisé ont été proposés au cours des 50 dernières années. :)

La modification de la sémantique du setter en atomique ne résoudra PAS le problème --- cela empêche simplement les changements de se produire pendant l'obtention et le réglage de votre variable (voir le Objective-C Documentation pour ce qu'il fait réellement).

Ce que vous voulez, c'est un mécanisme de signalisation entre les threads. Découvrez Objective-C Conditions.

+0

quelqu'un aurait écrit une mise en œuvre bien testée et sans bug pour ce problème habituel – coder000001

0

Si vous le définissez comme une propriété, utilisez le mot-clé atomic. Ou simplement omettre le mot-clé nonatomic, puisque atomic est la valeur par défaut la plus lente.

@property (atomic, retain) NSString *value; 

ou seulement

@property (retain) NSString *value; 
+0

Est-ce que cela suffira pour éviter les conditions de course? – coder000001