Sobes.tech
Junior

Co je to mutex?

sobes.tech AI

Odpověď od AI

Mutex (Mutual Exclusion) je mechanismus synchronizace, který se používá k ochraně sdíleného zdroje před současným přístupem více vláken (nebo procesů). V každém okamžiku může vlastnit mutex pouze jedno vlákno a tím získat přístup k chráněnému zdroji.

Hlavní operace s mutexem:

  • lock (zamknutí): Pokus o získání vlastnictví mutexu. Pokud je mutex volný, vlákno ho získá a pokračuje v provádění. Pokud je již obsazen jiným vláknem, aktuální vlákno je zablokováno, dokud není mutex uvolněn.
  • unlock (odemknutí): Uvolnění vlastnictví mutexu. To umožní jinému čekajícímu vláknu, aby ho získalo. Je důležité, aby mutex uvolnilo stejné vlákno, které ho získalo.

Například v Objective-C nebo Swift lze použít NSLock pro práci s mutexy.

Příklad použití NSLock v 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]; // Zamknutí mutexu
    @try {
        // Práce se _sharedResource - kritická sekce
        _sharedResource++;
        NSLog(@"Sdílený zdroj aktualizován na %d vlákem %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Odemknutí mutexu
    }
}

@end

Příklad použití NSLock ve Swift:

// Swift
import Foundation

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

    func updateSharedResource() {
        lock.lock() // Zamknutí mutexu
        // Práce se sharedResource - kritická sekce
        sharedResource += 1
        print("Sdílený zdroj aktualizován na \(sharedResource) vlákem \(Thread.current)")
        lock.unlock() // Odemknutí mutexu
    }
}

Mutexy zabraňují závodním podmínkám (race condition) a zajišťují integritu dat při paralelním přístupu. Nesprávné použití může vést k deadlockům.