Sobes.tech
Junior

Ce este un mutex?

sobes.tech AI

Răspuns de la AI

Mutex (Excludere Mutuală) este un mecanism de sincronizare utilizat pentru a proteja o resursă comună împotriva accesului simultan din partea mai multor fire (sau procese). În orice moment, doar un singur fir poate deține mutex-ul și, prin urmare, poate accesa resursa protejată.

Operațiuni principale cu mutex-ul:

  • lock (blocare): Încercarea de a obține deținerea mutex-ului. Dacă mutex-ul este liber, firul îl preia și continuă execuția. Dacă este deja ocupat de alt fir, firul curent este blocat până când mutex-ul este eliberat.
  • unlock (deblocare): Eliberarea deținerii mutex-ului. Acest lucru permite altui fir în așteptare să îl preia. Este important ca mutex-ul să fie eliberat de același fir care l-a deținut.

De exemplu, în Objective-C sau Swift, se poate folosi NSLock pentru a lucra cu mutex-uri.

Exemplu de utilizare a NSLock în Objective-C:

// Objective-C
#import <Foundation/Foundation.h>

@interface MyClass : NSObject {
    NSLock *_lock;
    int _sharedResource;
}
@end

@implementation MyClass

- (instancetype)init {
    self = [super init];
    if (self) {
        _lock = [[NSLock alloc] init];
        _sharedResource = 0;
    }
    return self;
}

- (void)updateSharedResource {
    [_lock lock]; // Blocarea mutex-ului
    @try {
        // Lucru cu _sharedResource - secțiune critică
        _sharedResource++;
        NSLog(@"Resursa partajată actualizată la %d de către firul %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Eliberarea mutex-ului
    }
}

@end

Exemplu de utilizare a NSLock în Swift:

// Swift
import Foundation

class MyClass {
    private let lock = NSLock()
    private var sharedResource = 0

    func updateSharedResource() {
        lock.lock() // Blocarea mutex-ului
        // Lucru cu sharedResource - secțiune critică
        sharedResource += 1
        print("Resursa partajată actualizată la \(sharedResource) de către firul \(Thread.current)")
        lock.unlock() // Eliberarea mutex-ului
    }
}

Mutex-urile previn condițiile de cursă (race condition) și asigură integritatea datelor în accesul paralel. Utilizarea incorectă poate duce la deadlock-uri.