Sobes.tech
Middle

Τι είναι το Interlocked στη C#;

sobes.tech AI

Απάντηση από AI

Interlocked είναι μια κλάση στον χώρο ονομάτων System.Threading που παρέχει ατομικές λειτουργίες για μεταβλητές που μπορούν να μοιράζονται πολλαπλά νήματα. Μια ατομική λειτουργία είναι μια λειτουργία που εκτελείται πλήρως ή καθόλου, ακόμη και σε ανταγωνιστική πρόσβαση από διαφορετικά νήματα.

Οι κύριες ατομικές λειτουργίες που παρέχονται από το Interlocked είναι:

  • Increment: αυξάνει ατομικά την τιμή μιας μεταβλητής τύπου int ή long.
  • Decrement: μειώνει ατομικά την τιμή μιας μεταβλητής τύπου int ή long.
  • Add: προσθέτει ατομικά μια τιμή σε μια μεταβλητή τύπου int ή long.
  • Exchange: αντικαθιστά ατομικά την τιμή μιας μεταβλητής με μια νέα και επιστρέφει την προηγούμενη τιμή. Υποστηρίζεται για διάφορους τύπους, συμπεριλαμβανομένων των int, long, float, double και τύπων αναφοράς.
  • CompareExchange: συγκρίνει ατομικά την τιμή μιας μεταβλητής με μια δοθείσα τιμή. Αν είναι ίσες, αντικαθιστά την τιμή της μεταβλητής με μια νέα. Επιστρέφει την προηγούμενη τιμή της μεταβλητής. Υποστηρίζεται για διάφορους τύπους, συμπεριλαμβανομένων των int, long, float, double και τύπων αναφοράς.

Η χρήση του Interlocked βοηθά στην αποφυγή προβλημάτων ανταγωνισμού δεδομένων (data races), που μπορεί να προκύψουν κατά την εργασία με κοινές μεταβλητές από διαφορετικά νήματα χωρίς κλειδώματα. Αυτό καθιστά τον κώδικα πιο αξιόπιστο και αποδοτικό σε σενάρια όπου απαιτείται μόνο ατομική πρόσβαση σε μία μεταβλητή, καθώς το Interlocked αποφεύγει συνήθως τα έξοδα που σχετίζονται με mutex ή κλειδώματα.

Παράδειγμα χρήσης του Interlocked.Increment:

// Μεταβλητή στην οποία θα έχουν πρόσβαση πολλά νήματα
private int _counter = 0;

public void Method1()
{
    // Ασφαλής ατομική αύξηση
    Interlocked.Increment(ref _counter);
}

public void Method2()
{
    // Ασφαλής ατομική αύξηση
    Interlocked.Increment(ref _counter);
}