POSIX Semaphore dengan Pemrograman C

Posix Semaphores With C Programming



POSIX mengacu pada Antarmuka Portabel OS, yang merupakan standar IEEE, yang dikembangkan untuk membantu portabilitas berbagai aplikasi. POSIX adalah upaya untuk membangun versi standar umum UNIX melalui kolaborasi vendor. Itu akan membuat porting aplikasi di antara platform perangkat keras lebih mudah jika efektif. Hewlett-Packard mengintegrasikan POSIX ke dalam MPE/iX OS versi 5.0 dan HP/UXX versi 10.0, masing-masing (UNIX-nya).

Standar POSIX memiliki lebih dari sepuluh bagian, namun, dua dapat diperoleh dengan mudah. POSIX.1 menjelaskan antarmuka pemrograman C (yaitu, pustaka panggilan sistem) untuk file, prosedur, dan terminal I/O. Pustaka paket C POSIX untuk platform POSIX adalah kerangka kerja pustaka standar C. Ini dibuat bersamaan dengan standar ANSI C. Untuk membuat POSIX sesuai dengan standar C, beberapa upaya telah dilakukan. POSIX menyediakan fitur tambahan untuk yang diimplementasikan dalam standar C.







POSIX Semaphore

Semaphore adalah struktur data yang sering digunakan untuk menyinkronkan proses dan membantu utas tanpa interaksi satu sama lain untuk beroperasi bersama. Antarmuka untuk semaphore ditentukan oleh standar POSIX. Itu bukan bagian dari Pthreads. Namun, kebanyakan UNIX yang mendukung Pthreads bahkan menyediakan semaphore. Dalam kerangka kerja mirip Unix, seperti Linux, semaphore digabungkan dengan antrian pesan dan memori umum di bawah layanan Interprocess Communication (IPC). Semafor kerangka V yang lebih lama dan semafor POSIX modern menjadi dua jenis semafor. Panggilan POSIX Semaphore jauh lebih mudah daripada panggilan Semaphore Sistem V. Meskipun, semafor Sistem V lebih mudah diperoleh, terutama pada platform mirip Unix sebelumnya. Ada kebutuhan untuk menghubungkan program menggunakan semaphore POSIX ke perpustakaan Pthread. Kami akan melihat semaphore POSIX di artikel ini.



Mengapa POSIX Semaphore?

Ada masalah besar di sekitar utas, yaitu kondisi balapan. Ini adalah keadaan di mana dua utas berusaha untuk mendapatkan dan mengubah informasi yang sama, sehingga membuatnya saling bertentangan. Untuk menghindari kondisi balapan, kami telah menggunakan semaphore untuk waktu yang sangat lama.



Semaphore tersedia dalam 2 jenis:





Semafor biner :

Itu juga dikenali sebagai kunci mutex. Itu hanya akan memiliki dua nilai yang mungkin, 0 dan 1. Nilai akan diinisialisasi sebagai 1. Ini digunakan untuk menegakkan banyak proses untuk memecahkan masalah bagian yang serius.



Menghitung Semafor :

Ukurannya dapat bervariasi di seluruh domain yang tidak dibatasi. Itu digunakan untuk memiliki otoritas atas akses ke berbagai sumber daya instans.

Kerangka kerja POSIX Linux memiliki repositori Semaphore yang terintegrasi. Untuk menggunakannya, kita harus:

  • Tambahkan semaphore.h
  • Tumpuk kode dengan menghubungkan dengan -lpthread -lrt.

Hampir semua metode dan formulir POSIX Semaphore dibuat prototipe atau ditentukan dalam 'Semaphore.h'. Kami akan menggunakan Semaphore untuk menggambarkan entitas atau objek sebagai:

>>sem_t sem_name;

Berikut adalah berbagai fungsi yang akan kita gunakan di POSIX Semaphore.

Sem_init

Untuk menginisialisasi semaphore, Anda harus menggunakan metode sem_init. Dalam fungsi ini, sem sesuai dengan objek semaphore yang diinisialisasi. Pshared adalah banner atau flag yang menentukan apakah semaphore dapat dibagikan dengan prosedur forked() atau tidak. Semafor bersama saat ini tidak didukung oleh LinuxThreads. Nilai argumen adalah nilai awal di mana semaphore ditetapkan.

>> ke dalamsemi_init(sem_t*semi, ke dalamdibagikan, tidak ditandatangani ke dalamnilai);

Sem_tunggu

Kami akan menggunakan metode sem-wait untuk menahan/mengunci semaphore atau membuatnya menunggu. Jika semaphore telah diberikan nilai negatif, maka siklus panggilan akan otomatis diblokir. Setiap kali ada utas lain memanggil sem_post, salah satu proses yang sudah tersumbat terbangun.

>> ke dalamsem_tunggu(sem_t*semi);

Sem_post

Kami akan menggunakan metode sem_post untuk meningkatkan nilai semaphore. Saat memanggil, sem_post akan menaikkan nilainya, dan salah satu proses yang sudah tersumbat atau menunggu terbangun.

>> ke dalamsem_post(sem_t*semi);

Sem_getnilai

Jika Anda ingin tahu tentang nilai semaphore, Anda harus menggunakan fungsi sem_getvalue di bawah ini. Ini akan mendapatkan nilai semaphore sekarang dan ditempatkan di tujuan berujung valp.

>>Int sem_getvalue(sem_t*semi, ke dalam *anak anjing);

Sem_hancurkan

Anda harus menggunakan metode sem_destroy jika Anda ingin menghancurkan semaphore. Jika kematian semaphore akan dilanjutkan, tidak ada thread yang menunggu di semaphore.

>>Int sem_destroy(sem_t*semi);

Instal Utilitas GCC

Untuk mengkompilasi kode POSIX Semaphore C, Anda harus menginstal utilitas gcc di sistem Linux Anda. Untuk tujuan ini, buka terminal perintah Anda dan coba perintah di bawah ini.

$sudo apt-get install gcc

Tegaskan tindakan Anda dengan menekan DAN .

Implementasi POSIX Semaphore dengan pemrograman C di Ubuntu

Pada awalnya, Anda harus membuat file baru dengan ekstensi .cpp pada sistem Ubuntu 20.04. Untuk ini, Anda harus menavigasi ke Direktori Rumah Anda dan membuat file kosong baru bernama new.cpp. Anda juga dapat membuatnya menggunakan perintah sentuh di terminal perintah Anda.

Anda dapat melihat bahwa file new.cpp telah dibuat di Direktori Home.


Setelah membuat file .cpp, buka sebagai Editor Teks di sistem Linux Anda dan tulis kode di bawah ini dalam file ini apa adanya. Setelah itu simpan dan tutup.

Jalankan Program POSIX Semaphore C Di Ubuntu 20.04

Buka terminal Anda Di Ubuntu 20.04 dan jalankan perintah gcc di bawah ini diikuti dengan nama file.

$gccnama file.c –lpthread –lrt

Ada 2 utas yang terbentuk, satu terbentuk setelah 2 detik dari yang lain. Setelah menerima baut, utas pertama tidur selama 4 detik. Jadi, setelah dipanggil, utas kedua tidak akan langsung bergabung, dan ini akan muncul 4-2=2 detik setelah dipanggil. Berikut adalah outputnya:

Jika kita tidak menggunakan semaphore, menurut konteks switching, hasilnya mungkin seperti yang diamati:

Kesimpulan

Dalam panduan ini, gambaran rinci tentang penggunaan POSIXSemaphore dengan pemrograman C di Ubuntu 20 telah diberikan. Dengan hanya menggunakan pustaka POSIX atau Pthread di seluruh kode C tertentu, POSIX Semaphore dapat dengan mudah digunakan untuk mencegah kondisi balapan selama pengkodean.