Javascript

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 !

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.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu