Sobes.tech
Junior

Šta je mutex?

sobes.tech АИ

Одговор од АИ

Мьютекс (взаимна искључивост) је механизам синхронизације који се користи за заштиту заједничког ресурса од истовременог приступа од стране више токова (или процеса). У сваком тренутку, само један ток може да поседује мьютекс и, сходно томе, да приступи заштићеном ресурсу.

Главне операције са мьютексом:

  • lock (закључавање): Покушај да се стекне власништво над мьютексом. Ако је мьютекс слободан, ток га преузима и наставља са извршавањем. Ако је већ заузет од стране другог тока, тренутни ток се блокира док се мьютекс не ослободи.
  • unlock (откључавање): Ослобађање власништва над мьютексом. Ово омогућава другом чекајућем току да га преузме. Важно је да мьютекс ослободи исти ток који га је преузео.

На пример, у Objective-C или Swift-у, може се користити NSLock за рад са мютексима.

Пример коришћења NSLock у 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]; // Закључавање мьютекса
    @try {
        // Рад са _sharedResource - критична секција
        _sharedResource++;
        NSLog(@"Узајамни ресурс ажуриран на %d од стране тока %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Ослобађање мьютекса
    }
}

@end

Пример коришћења NSLock у Swift-у:

// Swift
import Foundation

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

    func updateSharedResource() {
        lock.lock(); // Закључавање мьютекса
        // Рад са sharedResource - критична секција
        sharedResource += 1
        print("Узајамни ресурс ажуриран на \(sharedResource) од стране тока \(Thread.current)")
        lock.unlock(); // Ослобађање мьютекса
    }
}

Мютекси спречавају услове трка (race conditions) и обезбеђују интегритет података при паралелном приступу. Неправилна употреба може довести до deadlock-ова.