Junior
Какво е мьютекс (mutex)?
sobes.tech AI
Отговор от AI
Мютекс (взаимно изключване) е механизъм за синхронизация, който се използва за защита на споделен ресурс от едновременен достъп от няколко нишки (или процеси). Във всеки момент само една нишка може да притежава мютекса и съответно да получи достъп до защитения ресурс.
Основни операции с мютекса:
- 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) и осигуряват цялостността на данните при паралелен достъп. Неправилната употреба може да доведе до deadlocks.