Sobes.tech
Junior

Čo je to mutex?

sobes.tech AI

Odpoveď od AI

Mutex (mutex, Mutual Exclusion) je mechanizmus synchronizácie, ktorý sa používa na ochranu spoločného zdroja pred súčasným prístupom z viacerých vlákien (alebo procesov). V každom momente môže vlastniť mutex iba jedno vlákno a zodpovedajúcim spôsobom získať prístup k chránenému zdroju.

Hlavné operácie s mutexom:

  • lock (zámok): Pokus získať vlastníctvo mutexu. Ak je mutex voľný, vlákno ho získa a pokračuje v vykonávaní. Ak je mutex už obsadený iným vláknom, aktuálne vlákno sa zablokuje, kým nebude mutex uvoľnený.
  • unlock (uvoľnenie): Uvoľnenie vlastníctva mutexu. To umožňuje inému čakajúcemu vláknu ho získať. Je dôležité, aby mutex uvoľnilo to isté vlákno, ktoré ho získalo.

Napríklad v Objective-C alebo Swift na prácu s mutexmi môžete použiť NSLock.

Príklad použitia 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]; // Zámok mutexu
    @try {
        // Práca so _sharedResource - kritická sekcia
        _sharedResource++;
        NSLog(@"Shared resource updated to %d by thread %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Uvoľnenie mutexu
    }
}

@end

Príklad použitia NSLock v Swift:

//  Swift
import Foundation

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

    func updateSharedResource() {
        lock.lock() // Zámok mutexu
        // Práca so sharedResource - kritická sekcia
        sharedResource += 1
        print("Shared resource updated to \(sharedResource) by thread \(Thread.current)")
        lock.unlock() // Uvoľnenie mutexu
    }
}

Mutexy zabraňujú stavu súťaže (race condition) a zabezpečujú integritu dát pri paralelnom prístupe. Nesprávne použitie mutexov môže viesť k vzájomným zámkom (deadlocks).