Javascript Sleep with Semaphore Algoritması

Herkese merhaba, Javascript yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda sıralama algoritmalarından biri olan sleep with semaphore algoritmasını anlatacağım. Hadi başlayalım !
Table of Contents
Sleep with semaphore algoritması, birçok programlama dilinde mevcut olan bir senkronizasyon tekniğidir. Bu teknik, bir işlem tarafından kullanılan kaynağı bir diğer işlem tarafından kullanılabilmesi için izin verir. Bu işlemler, bir semafor adı verilen bir sayıya sahiptirler. Semafor, işlemler arasındaki etkileşimi kontrol etmek için kullanılır.
Bu makalede, Sleep with semaphore algoritmasının ne olduğu, nasıl çalıştığı ve JavaScript ile nasıl kullanıldığı ele alınacaktır.
Sleep with Semaphore Algoritması
Sleep with semaphore algoritması, öncelikle bir semafor değişkeni oluşturulmasıyla başlar. Bu değişken, işlem sayısını kontrol etmek için kullanılır. Daha sonra, işlemler sırayla çalıştırılır ve bir işlem kaynağı kullanmaya başladığında, semafor değişkeni 1 azaltılır. Kaynak kullanımı tamamlandığında, semafor değişkeni 1 artırılır. Bu sayede, diğer işlemler kaynağı kullanmak için sıraya girerler.
Sleep with semaphore algoritması, bir işlem kaynağı kullanmaya çalışırken semafor değişkeni 0 ise, işlem uyku moduna geçer. Uyku modundaki işlem, semafor değişkeni bir arttığında tekrar çalışmaya başlar.
Javascript Kodu
JavaScript’de, Sleep with semaphore algoritması aşağıdaki gibi uygulanabilir:
// Bir semafor değişkeni oluşturulur
const semaphore = 1;
// İşlem 1
function processOne() {
while (true) {
// Semafor değişkeni 0 ise işlem uyku moduna geçer
while (semaphore === 0) {
setTimeout(() => {
// Semafor değişkeni 1 arttığında işlem tekrar çalışmaya başlar
semaphore++;
}, 1000);
}
// Kaynak kullanımı yapılır
console.log("Process 1 using resource");
// Semafor değişkeni 1 azaltılır
semaphore--;
}
}
// İşlem 2
function processTwo() {
while (true) {
// Semafor değişkeni 0 ise işlem uyku moduna geçer
while (semaphore === 0) {
setTimeout(() => {
// Semafor değişkeni 1 arttığında işlem tekrar çalışmaya başlar
semaphore++;
}, 1000);
}
// Kaynak kullanımı yapılır
console.log("Process 2 using resource");
// Semafor değişkeni 1 azaltılır
semaphore--;
}
}
// İşlemler sırayla çalıştırılır
processOne();
processTwo();
Bu örnekte, processOne() ve processTwo() fonksiyonları, kaynak kullanımı yaparken semafor değişkenini kontrol ederler ve semafor değişkeni 0 ise, setTimeout() fonksiyonu kullanarak işlemi 1 saniyeliğine uyku moduna geçirirler. Semafor değişkeni bir arttığında, işlem tekrar çalışmaya başlar.
Örnek Uygulama
Sleep with semaphore algoritmasının bir örneği, birden fazla kullanıcının belirli bir kaynağı kullanmasına izin veren bir uygulamada kullanılabilir. Örneğin, bir çevrimiçi not defteri uygulamasında, bir kullanıcının bir notu düzenlediği zaman, diğer kullanıcıların aynı notu düzenlemesine izin verilmemesi gerekir.
Aşağıdaki örnekte, iki kullanıcının aynı notu düzenlemesi önlenebilir:
// Bir semafor değişkeni oluşturulur
const semaphore = 1;
// Not defteri sınıfı
class Notebook {
constructor() {
this.note = "";
}
// Not düzenleme işlemi
editNote(user) {
while (true) {
// Semafor değişkeni 0 ise işlem uyku moduna geçer
while (semaphore === 0) {
setTimeout(() => {
// Semafor değişkeni 1 arttığında işlem tekrar çalışmaya başlar
semaphore++;
}, 1000);
}
// Kaynak kullanımı yapılır
console.log(`${user} is editing the note`);
// Semafor değişkeni 1 azaltılır
semaphore--;
// Not düzenleme işlemi yapılır
this.note += `(${user}) `;
// Semafor değişkeni 1 arttırılır
semaphore++;
return this.note;
}
}
}
// İki kullanıcının not düzenleme işlemi
const notebook = new Notebook();
console.log(notebook.editNote("User 1"));
console.log(notebook.editNote("User 2"));
console.log(notebook.editNote("User 1"));
console.log(notebook.editNote("User 2"));
Bu örnekte, Notebook sınıfı, bir kullanıcının notu düzenlemesine izin verir. editNote() fonksiyonu, semafor değişkenini kullanarak, bir kullanıcının notu düzenlerken diğer kullanıcının notu düzenlemesini engeller.
Sonuç
Sleep with semaphore algoritması, birden fazla işlem arasındaki kaynak kullanımını kontrol etmek için kullanılan bir senkronizasyon tekniğidir. Bu algoritma, bir semafor değişkeni kullanarak işlemlerin sırayla çalışmasını sağlar. JavaScript ile Sleep with semaphore algoritması, semafor değişkeni kontrolü yapmak için setTimeout() fonksiyonu kullanılarak uygulanabilir.
Evet sleep with semaphore algoritması bu şekilde olmakta. Tüm Javascript yazılarımıza buraya, diğer sıralama algoritmaları ile ilgili yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.