Sobes.tech
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.