Selamlar
Projelerinizde kullanabileceğiniz Recursive Mutex Sınıfı:
Kullanımı:
Neden buna ihtiyaç duyuyoruz?
Threadler arasında bazen senkronizasyon ihtiyacı oluyor, Örneğin bir vectorumuz var ve A Threadi içerisinde çalışıyor ayrıca bu Thread vectore veri giriş/çıkışı yapıyor, B Threadi ise A Threadi içerisinde veri girişi yapılan Vector üzerinde okuma ve sonuca göre işlem yapıyor bu threadler farklı iş parçacıkları içerisinde olmasından dolayı okuma yaptığımız sırada vectore bir veri girişi olması halinde B Threadi içerisinde heap memory corruption ile karşılaşıyoruz bu kritik bir hata olduğu için uygulamanın çakılmasına neden oluyor. Bu nedenle farklı threadler arasında ortaklaşa gerçekleştirilen işlemlerden önce mutex ile işlemleri senkronize halde tutmamız gerekiyor
Ayrıca bu sınıfın şöyle tatlı bir olayı var dikkat ettiyseniz yıkıcısında "target.unlock();" çalışıyor dolayısıyla fonksiyon içerisinde iş bittiğinde Guard kilidi kaldırıyor.
Giriş
Metin2 private server geliştirme süreçlerinde, özellikle çoklu kanal yapıları ve eş zamanlı işlemler (multithreading) ile çalışırken, thread güvenliği (thread safety) büyük önem taşır. Bu bağlamda, C++ dilinde bulunan mutex (karşılıklı dışlama) yapısı, birden fazla iş parçacığının aynı kaynağa erişimini kontrol etmek için kullanılır. Ancak bazı durumlarda, aynı iş parçacığı kendi içinde tekrar mutex kilidini almak isteyebilir. İşte bu noktada recursive mutex devreye girer.
Recursive Mutex Nedir?
C++11 ile birlikte standart kütüphaneye eklenen std::recursive_mutex, aynı iş parçacığının birden fazla kez kilidi alabilmesini sağlar. Normal bir mutex, bir iş parçacığı tarafından kilitlendiğinde başka bir kez aynı iş parçacığı tarafından kilitlenmeye çalışıldığında ölümcül kilitlenmeye (deadlock) neden olabilir. Recursive mutex ise bu durumda kilidi tekrar alabilir, ancak her kilitleme işlemi için karşılık gelen bir açma işlemi yapılması gerekir.
Neden Recursive Mutex Kullanılır?
Metin2 gibi MMORPG sunucularında, oyuncu verileri, envanter işlemleri, eşya sistemleri gibi birçok alan eş zamanlı olarak erişilebilir olup, bu erişimlerin güvenli olması gerekir. Özellikle game core veya db core yapılarında, aynı fonksiyon zincirinde farklı seviyelerde mutex kilitlemeleri gerekebilir. Bu gibi durumlarda recursive mutex, daha temiz ve güvenli kod yazmamızı sağlar.
Temel Kullanım Örneği
Avantajlar ve Dezavantajlar
Avantajlar:
- Aynı iş parçacığı tarafından tekrar tekrar kilide izin verir.
- Fonksiyonel programlamada ve iç içe çağrılar için idealdir.
Dezavantajlar:
- Performansı standart mutex'e göre düşüktür.
- Kodun okunabilirliğini azaltabilir.
Metin2 Geliştirme Süreçlerinde Recursive Mutex Kullanımı
Metin2 server src üzerinde çalışırken, auth[/CHARACTER] ve game sunucuları arasında paylaşılan veri yapıları için recursive mutex oldukça faydalıdır. Özellikle kullanıcı envanteri veya eşya transferi gibi senaryolarda, birden fazla fonksiyonun aynı anda erişim sağlaması gerekebilir. Bu gibi durumlarda, recursive mutex ile güvenli bir şekilde eş zamanlı erişim sağlanabilir.
Sonuç
C++ recursive mutex, çoklu iş parçacığı ile çalışan Metin2 özel sunucularında thread güvenliği sağlamak adına güçlü bir araçtır. Ancak dikkatli kullanılmalıdır. Yanlış kullanımda performans kaybı yaşanabilir. Özellikle source edit süreçlerinde, recursive mutex ile korunan veri yapılarının tasarımı, sunucu kararlılığını doğrudan etkileyebilir. Bu nedenle, recursive mutex kullanırken dikkatli planlama ve test aşamaları şarttır.
Introduction
In Metin2 private server development processes, especially when working with multi-channel structures and concurrent operations (multithreading), thread safety becomes crucial. In this context, mutex (mutual exclusion) structure available in C++ language is used to control access of multiple threads to the same resource. However, in some cases, the same thread may want to lock the mutex again within itself. This is where recursive mutex comes into play.
What is Recursive Mutex?
Added to the standard library with C++11, std::recursive_mutex allows the same thread to acquire the lock multiple times. A regular mutex can cause a deadlock if the same thread attempts to lock it again after already being locked by that thread. Recursive mutex allows this kind of re-locking, but each lock operation must be matched with a corresponding unlock operation.
Why Use Recursive Mutex?
In MMORPG servers like Metin2, areas such as player data, inventory operations, and item systems can be accessed concurrently, requiring these accesses to be secure. Especially in game core or db core structures, mutex locking at different levels within the same function chain might be necessary. In such scenarios, recursive mutex enables cleaner and safer code writing.
Basic Usage Example
Advantages and Disadvantages
Advantages:
- Allows the same thread to lock multiple times.
- Ideal for functional programming and nested calls.
Disadvantages:
- Slower performance compared to standard mutex.
- May reduce code readability.
Using Recursive Mutex in Metin2 Development Processes
While working on Metin2 server src, recursive mutex is highly beneficial for shared data structures between auth and game servers. Particularly in scenarios like user inventories or item transfers, multiple functions might need to access simultaneously. In such cases, safe concurrent access can be achieved with recursive mutex.
Conclusion
C++ recursive mutex is a powerful tool for ensuring thread safety in multi-threaded Metin2 private servers. However, it must be used carefully. Improper usage can lead to performance loss. Especially during source edit phases, the design of data structures protected by recursive mutex directly affects server stability. Therefore, careful planning and testing stages are essential when using recursive mutex.
Projelerinizde kullanabileceğiniz Recursive Mutex Sınıfı:
Kod:
#pragma once #include <mutex> class Guard { public: Guard(std::recursive_mutex& mutex) : target(mutex) { target.lock(); } Guard(std::recursive_mutex* mutex) : target(*mutex) { target.lock(); } ~Guard() { target.unlock(); } protected: std::recursive_mutex& target; };
Kullanımı:
Kod:
std::recursive_mutex m_vecLootListLock; // Global Guard lock(m_vecLootListLock);
Neden buna ihtiyaç duyuyoruz?
Threadler arasında bazen senkronizasyon ihtiyacı oluyor, Örneğin bir vectorumuz var ve A Threadi içerisinde çalışıyor ayrıca bu Thread vectore veri giriş/çıkışı yapıyor, B Threadi ise A Threadi içerisinde veri girişi yapılan Vector üzerinde okuma ve sonuca göre işlem yapıyor bu threadler farklı iş parçacıkları içerisinde olmasından dolayı okuma yaptığımız sırada vectore bir veri girişi olması halinde B Threadi içerisinde heap memory corruption ile karşılaşıyoruz bu kritik bir hata olduğu için uygulamanın çakılmasına neden oluyor. Bu nedenle farklı threadler arasında ortaklaşa gerçekleştirilen işlemlerden önce mutex ile işlemleri senkronize halde tutmamız gerekiyor
Ayrıca bu sınıfın şöyle tatlı bir olayı var dikkat ettiyseniz yıkıcısında "target.unlock();" çalışıyor dolayısıyla fonksiyon içerisinde iş bittiğinde Guard kilidi kaldırıyor.
C++ Recursive Mutex Kullanımı
Giriş
Metin2 private server geliştirme süreçlerinde, özellikle çoklu kanal yapıları ve eş zamanlı işlemler (multithreading) ile çalışırken, thread güvenliği (thread safety) büyük önem taşır. Bu bağlamda, C++ dilinde bulunan mutex (karşılıklı dışlama) yapısı, birden fazla iş parçacığının aynı kaynağa erişimini kontrol etmek için kullanılır. Ancak bazı durumlarda, aynı iş parçacığı kendi içinde tekrar mutex kilidini almak isteyebilir. İşte bu noktada recursive mutex devreye girer.
Recursive Mutex Nedir?
C++11 ile birlikte standart kütüphaneye eklenen std::recursive_mutex, aynı iş parçacığının birden fazla kez kilidi alabilmesini sağlar. Normal bir mutex, bir iş parçacığı tarafından kilitlendiğinde başka bir kez aynı iş parçacığı tarafından kilitlenmeye çalışıldığında ölümcül kilitlenmeye (deadlock) neden olabilir. Recursive mutex ise bu durumda kilidi tekrar alabilir, ancak her kilitleme işlemi için karşılık gelen bir açma işlemi yapılması gerekir.
Neden Recursive Mutex Kullanılır?
Metin2 gibi MMORPG sunucularında, oyuncu verileri, envanter işlemleri, eşya sistemleri gibi birçok alan eş zamanlı olarak erişilebilir olup, bu erişimlerin güvenli olması gerekir. Özellikle game core veya db core yapılarında, aynı fonksiyon zincirinde farklı seviyelerde mutex kilitlemeleri gerekebilir. Bu gibi durumlarda recursive mutex, daha temiz ve güvenli kod yazmamızı sağlar.
Temel Kullanım Örneği
Kod:
[COLOR=green]#include <mutex>[BR][/BR]std::recursive_mutex rmtx;[BR][/BR][BR][/BR]void function1() {[BR][/BR] rmtx.lock();[BR][/BR] // İşlem 1[BR][/BR] function2();[BR][/BR] rmtx.unlock();[BR][/BR]}[BR][/BR][BR][/BR]void function2() {[BR][/BR] rmtx.lock();[BR][/BR] // İşlem 2[BR][/BR] rmtx.unlock();[BR][/BR]}[/COLOR]
Avantajlar ve Dezavantajlar
Avantajlar:
- Aynı iş parçacığı tarafından tekrar tekrar kilide izin verir.
- Fonksiyonel programlamada ve iç içe çağrılar için idealdir.
Dezavantajlar:
- Performansı standart mutex'e göre düşüktür.
- Kodun okunabilirliğini azaltabilir.
Metin2 Geliştirme Süreçlerinde Recursive Mutex Kullanımı
Metin2 server src üzerinde çalışırken, auth[/CHARACTER] ve game sunucuları arasında paylaşılan veri yapıları için recursive mutex oldukça faydalıdır. Özellikle kullanıcı envanteri veya eşya transferi gibi senaryolarda, birden fazla fonksiyonun aynı anda erişim sağlaması gerekebilir. Bu gibi durumlarda, recursive mutex ile güvenli bir şekilde eş zamanlı erişim sağlanabilir.
Sonuç
C++ recursive mutex, çoklu iş parçacığı ile çalışan Metin2 özel sunucularında thread güvenliği sağlamak adına güçlü bir araçtır. Ancak dikkatli kullanılmalıdır. Yanlış kullanımda performans kaybı yaşanabilir. Özellikle source edit süreçlerinde, recursive mutex ile korunan veri yapılarının tasarımı, sunucu kararlılığını doğrudan etkileyebilir. Bu nedenle, recursive mutex kullanırken dikkatli planlama ve test aşamaları şarttır.
C++ Recursive Mutex Usage
Introduction
In Metin2 private server development processes, especially when working with multi-channel structures and concurrent operations (multithreading), thread safety becomes crucial. In this context, mutex (mutual exclusion) structure available in C++ language is used to control access of multiple threads to the same resource. However, in some cases, the same thread may want to lock the mutex again within itself. This is where recursive mutex comes into play.
What is Recursive Mutex?
Added to the standard library with C++11, std::recursive_mutex allows the same thread to acquire the lock multiple times. A regular mutex can cause a deadlock if the same thread attempts to lock it again after already being locked by that thread. Recursive mutex allows this kind of re-locking, but each lock operation must be matched with a corresponding unlock operation.
Why Use Recursive Mutex?
In MMORPG servers like Metin2, areas such as player data, inventory operations, and item systems can be accessed concurrently, requiring these accesses to be secure. Especially in game core or db core structures, mutex locking at different levels within the same function chain might be necessary. In such scenarios, recursive mutex enables cleaner and safer code writing.
Basic Usage Example
Kod:
[COLOR=green]#include <mutex>[BR][/BR]std::recursive_mutex rmtx;[BR][/BR][BR][/BR]void function1() {[BR][/BR] rmtx.lock();[BR][/BR] // Operation 1[BR][/BR] function2();[BR][/BR] rmtx.unlock();[BR][/BR]}[BR][/BR][BR][/BR]void function2() {[BR][/BR] rmtx.lock();[BR][/BR] // Operation 2[BR][/BR] rmtx.unlock();[BR][/BR]}[/COLOR]
Advantages and Disadvantages
Advantages:
- Allows the same thread to lock multiple times.
- Ideal for functional programming and nested calls.
Disadvantages:
- Slower performance compared to standard mutex.
- May reduce code readability.
Using Recursive Mutex in Metin2 Development Processes
While working on Metin2 server src, recursive mutex is highly beneficial for shared data structures between auth and game servers. Particularly in scenarios like user inventories or item transfers, multiple functions might need to access simultaneously. In such cases, safe concurrent access can be achieved with recursive mutex.
Conclusion
C++ recursive mutex is a powerful tool for ensuring thread safety in multi-threaded Metin2 private servers. However, it must be used carefully. Improper usage can lead to performance loss. Especially during source edit phases, the design of data structures protected by recursive mutex directly affects server stability. Therefore, careful planning and testing stages are essential when using recursive mutex.
