Junior
Mis on mutex?
sobes.tech AI
Vastus AI-lt
Mutex (mutex, Mutual Exclusion) on sünkroniseerimismehhanism, mida kasutatakse ühise ressursi kaitsmiseks samaaegse juurdepääsu eest mitme niidi (või protsessi) poolt. Iga hetk võib ainult üks niit omada mutexi ja vastavalt sellele pääseda kaitstud ressursile.
Peamised operatsioonid mutexiga:
- lock (lukk): Püüd saada mutexi omanikuks. Kui mutex on vaba, haarab niit selle ja jätkab täitmist. Kui mutex on juba hõivatud teise niidi poolt, blokeeritakse käesolev niit kuni mutex vabastatakse.
- unlock (vabastamine): Mutexi omandi vabastamine. See võimaldab teisel ootel niidil selle haarata. Oluline on, et mutex vabastab sama niit, mis selle haaras.
Näide Objective-C või Swiftis mutexidega töötamiseks on NSLock.
Objective-C näide NSLock kasutamisest:
// 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]; // Mutexi lukustamine
@try {
// Töö _sharedResource'iga — kriitiline sektsioon
_sharedResource++;
NSLog(@"Shared resource updated to %d by thread %@", _sharedResource, [NSThread currentThread]);
}
@finally {
[_lock unlock]; // Mutexi vabastamine
}
}
@end
Swiftis näide NSLock kasutamisest:
// Swift
import Foundation
class MyClass {
private let lock = NSLock()
private var sharedResource = 0
func updateSharedResource() {
lock.lock() // Mutexi lukustamine
// Töö sharedResource'iga — kriitiline sektsioon
sharedResource += 1
print("Shared resource updated to \(sharedResource) by thread \(Thread.current)")
lock.unlock() // Mutexi vabastamine
}
}
Mutexid ennetavad võistlusolukorda (race condition) ja tagavad andmete terviklikkuse paralleeljuurdepääsu korral. Vale kasutamine võib viia deadlock'ide tekkeni.