Je viens de créer un singleton méthode, et je voudrais savoir ce que la fonction @synchronized()
t, comme je l'utilise souvent, mais ne connaissent pas la signification.
Réponses
Trop de publicités?Il déclare une section critique autour du bloc de code. Dans le code multithread, @synchronized
garantit qu'un seul thread peut exécuter du code dans le bloc à un moment donné.
Si vous n'êtes pas conscient de ce qu'il fait, alors votre demande n'est probablement pas le multithread, et vous n'avez probablement pas besoin de l'utiliser (surtout si le singleton n'est pas thread-safe).
À partir de la documentation d'Apple ici et ici:
@Synchronisé directive est un moyen pratique de créer des mutex serrures à la volée en code Objective-C. L' @synchronisé directive ne fait ce que n'importe quel d'autres mutex lock ferait-il empêche les différents threads de l'acquisition de la même verrou en même temps.
La documentation fournit une mine de renseignements sur ce sujet. Il vaut la peine de prendre le temps de lire, surtout étant donné que vous avez été en utilisant, sans savoir ce qu'il fait.
L' @synchronized
directive est un moyen pratique de créer des mutex verrous à la volée en Objective-C du code.
L' @synchronized
directive ne fait ce que n'importe quel autre mutex lock ferait-il empêche les différents fils de l'acquisition de la même serrure en même temps.
Syntaxe:
@synchronized(key)
{
// thread-safe code
}
Exemple:
-(void)AppendExisting:(NSString*)val
{
@synchronized (val) {
[oldValue stringByAppendingFormat:@"-%@",val];
}
}
Maintenant, le code ci-dessus est parfaitement thread-safe..Maintenant Plusieurs threads peuvent modifier la valeur.
Ce qui précède est juste un obscur exemple...
@bloc synchronisé automatiquement les poignées de verrouillage et de déverrouillage pour vous. @synchroniser vous avez un implicite de verrouillage associés à l'objet que vous utilisez pour synchroniser. Ici est très instructif de discussion sur ce sujet, veuillez suivre Comment @synchronisé de verrouillage/déverrouillage en Objective-C?
Excellente réponse ici:
Aider à la compréhension de la méthode de classe de retourner singleton
avec plus d'explication sur le processus de création d'un singleton.