Sobes.tech
Junior

Kas ir mutex?

sobes.tech AI

Atbilde no AI

Mūtekss (mutex, Mutual Exclusion) ir mehānisms, kas tiek izmantots sinhronizācijai, lai aizsargātu kopīgu resursu no vienlaicīgas piekļuves vairāku pavedienu (vai procesu) laikā. Katru brīdi tikai viens pavediens var būt mūtekss un attiecīgi piekļūt aizsargātajam resursam.

Galvenās operācijas ar mūtekss:

  • lock (slēdzis): Mēģinājums iegūt mūtekss īpašumtiesības. Ja mūtekss ir brīvs, pavediens to aizslēdz un turpina darbu. Ja mūtekss jau ir aizņemts ar citu pavedienu, pašreizējais pavediens tiek bloķēts līdz mūtekss tiek atbrīvots.
  • unlock (atbrīvošana): Mūtekss īpašumtiesību atbrīvošana. Tas ļauj citam gaidošajam pavedienam to aizņemt. Ir svarīgi, lai mūtekss tiktu atbrīvots tajā pašā pavedienā, kas to ir aizņēmies.

Piemērs, izmantojot NSLock Objective-C vai Swift:

Objective-C piemērs ar 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ūtekss slēdzis
    @try {
        // Darbs ar _sharedResource — kritiskā sadaļa
        _sharedResource++;
        NSLog(@"Shared resource updated to %d by thread %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Mūtekss atbrīvots
    }
}

@end

Swift piemērs ar NSLock:

//  Swift
import Foundation

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

    func updateSharedResource() {
        lock.lock(); // Mūtekss slēdzis
        // Darbs ar sharedResource — kritiskā sadaļa
        sharedResource += 1
        print("Shared resource updated to \(sharedResource) by thread \(Thread.current)")
        lock.unlock(); // Mūtekss atbrīvots
    }
}

Mūtekss novērš sacensības stāvokli (race condition) un nodrošina datu integritāti paralēlas piekļuves gadījumā. Nepareiza izmantošana var novest pie mirtušo aizslēgumu (deadlocks).