Sobes.tech
Junior

Kas yra mutex?

sobes.tech AI

Atsakymas iš AI

Mūtekso (mutex, Mutual Exclusion) — tai sinchronizacijos mechanizmas, naudojamas bendro ištekliaus apsaugai nuo vienalaikio prieigos kelių srautų (arba procesų). Kiekvienu momentu tik vienas srautas gali turėti mūtekso ir atitinkamai gauti prieigą prie apsaugoto ištekliaus.

Pagrindinės operacijos su mūtekso:

  • lock (užraktas): Bandymas gauti mūtekso nuosavybę. Jei mūtekso laisvas, srautas jį užrakina ir tęsia vykdymą. Jei mūtekso jau užima kitas srautas, dabartinis srautas blokuojamas iki kol mūtekso bus atlaisvintas.
  • unlock (atskilimas): Mūtekso nuosavybės atlaisvinimas. Tai leidžia kitam laukianciam srautui jį užimti. Svarbu, kad mūtekso atlaisvintų tas pats srautas, kuris jį užėmė.

Pavyzdžiui, Objective-C ar Swift naudoti NSLock darbui su mūtekso.

Objective-C pavyzdys naudojant NSLock:

//  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]; // Mūtekso užrakinimas
    @try {
        // Darbas su _sharedResource — kritinė sekcija
        _sharedResource++;
        NSLog(@"Shared resource updated to %d by thread %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Mūtekso atlaisvinimas
    }
}

@end

Swift pavyzdys naudojant NSLock:

//  Swift
import Foundation

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

    func updateSharedResource() {
        lock.lock() // Mūtekso užrakinimas
        // Darbas su sharedResource — kritinė sekcija
        sharedResource += 1
        print("Shared resource updated to \(sharedResource) by thread \(Thread.current)")
        lock.unlock() // Mūtekso atlaisvinimas
    }
}

Mūtekso prevencuoja lenkimo būseną (race condition) ir užtikrina duomenų vientisumą atliekant vienalaikį prieigą. Netinkamas naudojimas gali sukelti mirties užraktus (deadlocks).