Junior
Wat is een mutex?
sobes.tech AI
Antwoord van AI
Mutex (Mutual Exclusion) is een synchronisatie-mechanisme dat wordt gebruikt om een gedeelde bron te beschermen tegen gelijktijdige toegang door meerdere threads (of processen). Op elk moment kan slechts één thread het mutex bezitten en toegang krijgen tot de beschermde bron.
Belangrijke operaties met een mutex:
- lock (vergrendelen): Poging om het mutex in bezit te krijgen. Als het mutex vrij is, neemt de thread het over en gaat verder met uitvoeren. Als het al door een andere thread wordt gebruikt, wordt de huidige thread geblokkeerd totdat het mutex wordt vrijgegeven.
- unlock (ontgrendelen): Het vrijgeven van het mutex. Dit stelt een andere wachtende thread in staat om het over te nemen. Het is belangrijk dat hetzelfde thread dat het mutex heeft verworven, het ook vrijgeeft.
Bijvoorbeeld, in Objective-C of Swift kan NSLock worden gebruikt om met mutexen te werken.
Voorbeeld van gebruik van NSLock in 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]; // Mutex vergrendelen
@try {
// Werken met _sharedResource - kritische sectie
_sharedResource++;
NSLog(@"Shared resource bijgewerkt naar %d door thread %@", _sharedResource, [NSThread currentThread]);
}
@finally {
[_lock unlock]; // Mutex ontgrendelen
}
}
@end
Voorbeeld van gebruik van NSLock in Swift:
// Swift
import Foundation
class MyClass {
private let lock = NSLock()
private var sharedResource = 0
func updateSharedResource() {
lock.lock() // Mutex vergrendelen
// Werken met sharedResource - kritische sectie
sharedResource += 1
print("Shared resource bijgewerkt naar \(sharedResource) door thread \(Thread.current)")
lock.unlock() // Mutex ontgrendelen
}
}
Mutexen voorkomen race conditions en zorgen voor de integriteit van gegevens bij gelijktijdige toegang. Onjuist gebruik kan leiden tot deadlocks.