C Programlama

C Programlama ile POSIX Semaforları

C Programlama ile POSIX Semaforları

POSIX, farklı uygulamaların taşınabilirliğine yardımcı olmak için geliştirilmiş bir IEEE standardı olan İşletim Sisteminin Taşınabilir Arayüzünü ifade eder. POSIX, satıcıların işbirliği yoluyla ortak bir standartlaştırılmış UNIX sürümü oluşturma çabasıdır. Etkili olmaları durumunda, uygulamaları donanım platformları arasında taşımayı kolaylaştırır. Hewlett-Packard, POSIX'i lisanslı MPE/iX OS sürüm 5'e entegre ediyor.0 ve HP/UXX sürüm 10.0, sırasıyla (UNIX'i).

POSIX standardı ondan çok daha fazla parçaya sahiptir, ancak ikisi kolayca elde edilebilir. POSIX.1, C programlama arayüzlerini açıklar (i.e., dosyalar, prosedürler ve G/Ç terminalleri için bir sistem çağrısı kitaplığı). POSIX platformları için C POSIX paket kitaplığı, C standart kitaplığının bir çerçevesidir. Bu, standart ANSI C ile aynı zamanda kurulmuştur. POSIX'i standart C ile uyumlu hale getirmek için birkaç girişimde bulunuldu. POSIX, standart C'de uygulananlara ek özellikler sağlar.

POSIX Semaforları

Semafor, süreçleri senkronize etmek ve iş parçacıklarının birbirleriyle etkileşimi olmadan birlikte çalışmasına yardımcı olmak için sıklıkla kullanılan bir veri yapısıdır. Semaforlar için arayüz, POSIX standardı tarafından belirlenir. Pthreads'in bir parçası değil. Ancak, Pthreads'i destekleyen çoğu UNIX, semafor bile sağlar. Linux gibi Unix benzeri çerçevelerde, semaforlar, İşlemler Arası İletişim (IPC) hizmetlerinin altında mesaj kuyrukları ve ortak bellek ile birleştirilir. Eski çerçeve V semaforları ve modern POSIX semaforları iki tür semafor haline geldi. POSIX Semafor araması, System V Semafor aramalarından çok daha kolaydır. Her ne kadar System V semaforlarını elde etmek daha kolay olsa da, özellikle eski Unix benzeri platformlarda. POSIX semaforlarını kullanan programları Pthread kitaplığına bağlamaya ihtiyaç vardır. Bu yazıda POSIX semaforlarına bir göz atacağız.

Neden POSIX Semaforları?

"Yarış koşulu" olan konuların etrafında büyük bir sorun var. İki iş parçacığının aynı bilgiyi elde etmeye ve değiştirmeye çalıştığı, böylece çelişkili hale getirdiği bir durumdur. Bir yarış durumundan kaçınmak için semaforları çok uzun zamandır kullanıyoruz.

Semaforlar 2 çeşittir:

İkili Semafor:

Aynı zamanda bir muteks kilidi olarak da tanınır. Yalnızca iki olası değere sahip olurdu, 0 ve 1. Değer 1 olarak başlatılacaktır. Ciddi bölüm sorununu çözmek için çok sayıda işlemi uygulamak için kullanılıyor.

Sayma Semaforu:

Boyutu sınırsız bir etki alanında değişebilir. Çok sayıda örnek kaynağına erişim yetkisine sahip olmak için kullanılıyor.

Linux POSIX çerçevesi, entegre Semaphore deposuna sahiptir. Kullanmak için şunları yapmalıyız:

Hemen hemen tüm POSIX Semafor yöntemleri ve formları, 'Semafor'da prototiplenir veya belirtilir.h'. Bir varlığı veya nesneyi şu şekilde tanımlamak için Semaforu kullanacağız:

>> sem_t sem_adı;

İşte POSIX Semaforunda kullanacağımız farklı fonksiyonlar.

Sem_init

Bir semafor başlatmak için sem_init yöntemini kullanmanız gerekir. Bu işlevde sem, başlatılmış bir semafor nesnesine karşılık gelir. Pshared, semaforun forked() prosedürüyle paylaşılıp paylaşılamayacağını belirten bir başlık veya bayraktır. Paylaşılan semaforlar şu anda LinuxThreads tarafından desteklenmiyor. Argüman değeri, semaforun sabitlendiği başlangıç ​​değeridir.

>> int sem_init(sem_t *sem, int pshared, unsigned int değeri);

Sem_bekle

Bir semaforu tutmak/kilitlemek veya bekletmek için sem-wait yöntemini kullanacağız. Semafora negatif bir değer verilmişse, çağrı döngüsü otomatik olarak engellenecektir. Başka bir iş parçacığı sem_post'u çağırdığında, zaten tıkanmış işlemlerden biri uyanır.

>> int sem_wait(sem_t *sem);

Sem_post

Bir semaforun değerini artırmak için sem_post yöntemini kullanacağız. Çağrı üzerine, sem_post değeri arttırır ve zaten tıkanmış veya bekleyen işlemlerden biri uyanır.

>> int sem_post(sem_t *sem);

Sem_getdeğeri

Bir semaforun değerini bilmek istiyorsanız, aşağıdaki sem_getvalue işlevini kullanmanız gerekir. Semaforun şimdiki değerini alacak ve valp-noktalı hedefe yerleştirilecektir.

>> Int sem_getvalue(sem_t *sem, int *valp);

Sem_destroy

Semaforu yok etmek istiyorsanız sem_destroy yöntemini kullanmalısınız. Semaforun ölümü devam edecekse, semaforda hiçbir iş parçacığı beklemeyecektir.

>> Int sem_destroy(sem_t *sem);

GCC Yardımcı Programını yükleyin

POSIX Semaphore C kodunu derlemek için Linux sisteminizde gcc yardımcı programının kurulu olması gerekir. Bunun için komut terminalinizi açın ve aşağıdaki komutu deneyin.

$ sudo apt-get install gcc

Vurarak eyleminizi onaylayın Y.

Ubuntu'da C programlama ile POSIX Semaforunun Uygulanması

En başta, bir dosya ile yeni bir dosya oluşturmanız gerekir .Ubuntu 20'de cpp uzantısı.04 sistemi. Bunun için Ana Dizininize gitmeniz ve yeni adlı yeni bir boş dosya oluşturmanız gerekir.tbp. Komut terminalinizdeki touch komutunu kullanarak da oluşturabilirsiniz.

görebilirsin ki yeni.cpp dosyası Ana Dizinde oluşturuldu.


oluşturulmasından sonra, .cpp dosyasını Linux sisteminizde Text Editor olarak açın ve aşağıdaki kodu olduğu gibi bu dosyaya yazın. Daha sonra kaydedip kapatın.

Ubuntu 20'de POSIX Semaphore C Programını Yürütün.04

Terminalinizi Ubuntu 20'de açın.04 ve aşağıdaki gcc komutunu ve ardından dosya adını yürütün.

$ gcc dosya adı.c -lpthread -lrt

Oluşan 2 iplik var, biri 2 saniye sonra diğeri oluşuyor. Cıvatayı aldıktan sonra, ilk iplik 4 saniye uyur. Yani, çağrıldıktan sonra, ikinci thread doğrudan katılmaz ve çağrıldıktan 4-2=2 saniye sonra bu görünür. İşte çıktı:

Semafor kullanmamış olsaydık, bağlam değiştirmeye göre sonuç şu şekilde olabilirdi:

Sonuç

Bu kılavuzda, Ubuntu 20'de C programlama ile POSIXSemaphore kullanımına ilişkin ayrıntılı bir genel bakış verilmiştir. Belirli C kodu boyunca yalnızca POSIX veya Pthread kitaplığını kullanarak, POSIX Semaforu kodlama sırasında yarış koşullarını önlemek için oldukça kolay bir şekilde kullanılabilir.

Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...