web-dev-qa-db-fra.com

Différence entre opération atomique et sécurité du fil?

De la discussion que j'ai vue, il semble que opération atomique et Sécurité du fil Sont la même chose, mais beaucoup de gens disent qu'ils sont différents. Quelqu'un peut-il me dire la différence s'il y en a un?

10
user960567

Les opérations atomiques sont un moyen de corriger la sécurité des threads, soit en utilisant une sorte de serrure comme mutexes ou Semaphores qui utilisent des opérations atomiques en interne ou en mettant en œuvre verrouillage libre = Synchronisation à l'aide d'atomes et de clôtures de mémoire.

Les opérations atomiques sur les types de données primitives sont donc un outil pour la sécurité du thread de bonheur, mais ne garantit pas automatiquement la sécurité du thread, car vous avez normalement plusieurs opérations qui s'appuient sur l'autre. Vous devez vous assurer que ces opérations sont effectuées sans interruption, par exemple en utilisant des mutiles.

Oui, écrire un de ces types de données atomiques en C # est le fil de sécurité, mais cela ne fait pas la fonction que vous les utilisez dans le fil de sécurité. Il ne garantit que l'écriture unique correctement exécutée, même si un deuxième fil l'accède "en même temps". Jamais moins, la prochaine lecture du thread actuel n'est pas assurée pour obtenir la valeur précédemment écrite sous forme de thread différent pourriez l'avoir écrit, seulement que la valeur de la valeur est valide.

11
Archy

Atomicité et fil de sécurité sont deux choses différentes. Atomicité fait référence à " tout ou rien " la qualité de l'opération; si une opération ne peut être réalisée avec succès à 100%, le système doit rester dans l'état général, il avait été avant qu'une partie de l'opération a commencé. L'exemple classique est une transaction de base de données; Lors de l'enregistrement d'une facture, y compris son en-tête et plusieurs éléments de ligne, chaque partie de chaque ligne de base de données unique doit être mis en place avec succès; sinon, les données sont perdues ou endommagées. Si un élément de ligne ne peut pas être inséré, devrait non seulement pas d'autres lignes restantes sont insérées, mais aucune des lignes déjà traitées doit rester.

Réentrance fait référence à une combinaison de choses, y compris atomicité, qui permet une opération d'être " rentrants "; plusieurs travailleurs peuvent exécuteront la même opération, à partir des temps identiques ou différents, sans effet sur les autres. Il existe de nombreux modèles pour le fonctionnement thread-safe; la plupart d'entre eux se résument conceptuellement soit à plusieurs tâches parallèles en cours d'exécution dans un isolement complet (deux travailleurs peuvent effectuer la même tâche sur deux objets différents ou des collections d'objets sans jamais connaître l'autre travailleur existe même), ou la mise en place d'un " pipeline " dans lequel plusieurs travailleurs effectuent chacun une tâche à partir d'un ensemble de l'opération (soit chaque travailleur de la première progresse tâche à l'autre et ainsi de suite, ou encore se concentre sur une tâche et les mains de son " produit du travail " intermédiaire à l'autre travailleur).

3
KeithS

Une opération atomique est une opération qui ne peut pas être interrompue.

Un fil de sécurité est un fil qui peut être interrompu en toute sécurité.

La sécurité du fil est obtenue avec des opérations atomiques, en particulier dans la logique qui empêche les ressources essentielles d'être consultées plusieurs fois.

L'opération de base atomique est test-et-défini , utilisée pour la mise en œuvre de sémaphores, qui sont à son tour utilisés pour mettre en œuvre la sécurité du thread.

2
mouviciel

Le thread-Safety est plus un cadre ou un "concept", une opération atomique est un sous-ensemble, un moyen (un des nombreux) de la réalisation du statut comme étant classé "thread-coffre".

La sécurité du thread fait référence à un processus accessible par des threads distincts, où l'accès d'une (et de manipulation de données), ne corrompre pas l'intégrité de l'opération de l'autre.

Une grande partie des compétences du programmeur consiste à savoir comment y parvenir, en fonction de la situation et de l'objectif clé, vous devrez peut-être mettre en œuvre, par exemple: serrures, sémaphores, loquets, objets atomiques, règles de synchronisation, etc.

1
ADP