Bilmek istediğin her şeye ulaş

C++ veya diğer programlama dillerindeki Thread, Mutex ve Semaphore kavramları için kısa bir tanım yapabilir misiniz?

Semaphore, Thread ve Process kavramları sadece programlama dillerinin değil işletim sistemlerinin kavramlarıdır.

Semaphore kavramını tanımlamadan önce Process ve Thread kavramlarını bilmeliyiz:


Process

Process, bir bilgisayar programının çalıştırıldığındaki, yani RAM bellekte tutulup komutlarının (instruction) işlendiği halidir. Programın çalışan vaziyetine process diyebiliriz. Kendisine ait kod segmenti, yığın segmenti ve veri segmenti bulunur. Bir process en az bir threade sahiptir.

Thread

Thread'ler bir processe bağımlı halde çalışan kod parçalarıdır. Bir processin içinde birden fazla thread var olabilir. Kullanıcıya daha iyi yanıt süresi temin etmek için kullanılabilir. Okulda en çok duyduğum örneklerden biri olarak MS Word kullanırken bir yandan yazım denetleme yaparken bir yandan menülerle oynayabiliyoruz. Bunu sağlamak için menüleri yöneten farklı bir thread, yazım denetleme işini yapan farklı bir thread vardır. Processin kendisi de bir thread'dir.

Semaphore
Semaphore aynı kaynağa birden fazla process'in veya thread'in erişmesi gerektiği durumlarda mutual exclusion (mutex) sağlamak için kullanılır. En rahatından mutex tanımını burada gördüm: eksisozluk.com/show.asp?id=1522491

Semaphore şuna benzer. Bir toplulukta gece vakti ancak ve ancak bir kişi nöbet tutacaktır. Nöbet tutmak isteyen bir kişi nöbet süresince ayakta kalacak ve uyuyamayacaktır. Ortama gelen başka bir kişi ise uyumak zorundadır. Nöbetçi nöbet tutmak için sembolik bir obje olarak örneğin bir ışın kılıcına sahip olmalıdır. Gelen kişi öncelikle ışın kılıcının boşta olup olmadığına bakar. Eğer boşta ise nöbet tutan kimse yoktur ve nöbete başlar, değilse yatar uyur. Nöbeti biten nöbetçi ışın kılıcını aldığı yere koyar ve evdeki herkesi ( ya da sıradaki kişiyi ) uyandırır ve kendisi uyur.
Bu örnekteki nöbet, kaynağı, ışın kılıcı sayısı semaphore'ın başlatılma sayısını( yani kaç kişinin nöbet tutacağı veya kaynağa kaç processin erişebileceği ) tek kişinin nöbet tutması ise mutex'i temsil ediyor.

  • Paylaş
Yiğit Ünlü, tanımları çok iyi bir şekilde vermiş. Benim eklemek istediğim tek bir şey var. Bugünkü kullanımlarıyla mutex ve semaphore aynı anlama gelmiyor.

Semaphore iki thread'in mutual exculusive olmasını sağlamakla birlikte bundan biraz daha fazlasını yapabiliyor.

İlki semaphor'un tek bir kilidi yok. Bir bir tamsayı her tetiklemede yukarıya doğru sayabiliyor ve bir thread'in bir işlem veya kaynak kullanımı için izin alabilmesi için tüm kilitlerin serbest bırakılması gerekiyor. Örnek kavşakta beklerken, size tekrar sıra gelmesi için diğer üç yolun ve yayaların geçişlerinin tamamlaması gerekir. Her geçiş yapıldığında semaphore sayacı bir düşer 0 olduğunda size yeşil yanar.

Mutex'te durum biraz farklı, başvurduğunuzda kaynak ya erişilebilirdir ya da değildir (başka bir thread tarafından kullanılmaktadır) . Bu ikinci durumda beklersiniz. Bir de mutex'lerde kilitleyen thread kilidi açabilir. Semaphore'da böyle bir kural yoktur.

Not: Bu kavramlar işletim sistemi tarafından sunulan hizmetlerdir. Dilden bağımsızlar.
  • Paylaş
Thread'ler de process'ler gibi bir programın birden fazla iş yapmasını sağlayan mekanizmalardır. Bir program çalıştığında process oluşur ve yeni bir thread yaratılır ve bu thread aynı anda çalışan ve birbirini interrupt eden yeni thread'ler yaratabilir. Bir thread bir job process ederken başka bir thread'in job'lar listesine erişmemelidir. Mutex veya mutual exclution lock bunu sağlar. Bir thread varken, kilit kapanır ve diğerlerinin erişimi engellenir. Semaphore ise yeni job geldiğinde thread kalmaması durumunda geçerlidir.
(bkz: Advanced Linux Programming)
  • Paylaş
Sonraki Soru
HESAP OLUŞTUR

İstatistikler

2969 Görüntülenme13 Takipçi3 Yanıt

Eş Anlamlı Soru Ekle

  • C++ dilinde Thread, Mutex ve Semaphore kavramları ne anlama gelir?

  • C++ ta Thread nedir?

  • C++ ta Mutex nedir?

  • C++ ta Semaphore nedir?

  • Mutex ve semaphore nedir?