Junior
Mutex nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Mütek (Mutual Exclusion) — bu, çoklu akışlar (veya süreçler) tarafından ortak kullanılan kaynağın eşzamanlı erişimini korumak için kullanılan bir senkronizasyon mekanizmasıdır. Her zaman yalnızca bir akış müteği sahip olabilir ve korunan kaynağa erişebilir.
Mütek ile temel işlemler:
- lock (kilitleme): Müteğin sahipliğini almaya çalışma. Mütek boşsa, akış onu alır ve çalışmaya devam eder. Mütek başka bir akış tarafından zaten kullanılıyorsa, mevcut akış, mütek serbest bırakılana kadar engellenir.
- unlock (kilidi açma): Müteğin sahipliğini serbest bırakma. Bu, başka bir bekleyen akışın onu almasını sağlar. Müteğin, onu alan aynı akış tarafından serbest bırakılması önemlidir.
Örneğin, Objective-C veya Swift'te NSLock kullanılarak müteklerle çalışılabilir.
Objective-C'de NSLock kullanımı örneği:
// 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]; // Müteği kilitle
@try {
// _sharedResource ile çalışma - kritik bölüm
_sharedResource++;
NSLog(@"Paylaşılan kaynak güncellendi: %d tarafından, thread: %@", _sharedResource, [NSThread currentThread]);
}
@finally {
[_lock unlock]; // Müteği serbest bırak
}
}
@end
Swift'te NSLock kullanımı örneği:
// Swift
import Foundation
class MyClass {
private let lock = NSLock()
private var sharedResource = 0
func updateSharedResource() {
lock.lock() // Müteği kilitle
// sharedResource ile çalışma - kritik bölüm
sharedResource += 1
print("Paylaşılan kaynak güncellendi: \(sharedResource) tarafından, thread: \(Thread.current)")
lock.unlock() // Müteği serbest bırak
}
}
Mütekler yarış durumu (race condition) önler ve paralel erişimde veri bütünlüğünü sağlar. Yanlış kullanımı deadlock'lara yol açabilir.