POSIX Semaphore dengan Pemrograman C

POSIX mengacu pada Interface 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 berlisensi 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 interface pemrograman C (yaitu, perpustakaan panggilan sistem) untuk file, prosedur, dan terminal I/O. Pustaka paket C POSIX untuk platform POSIX adalah framework 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.

Semafor POSIX

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

Mengapa POSIX Semaphore?

Ada masalah besar seputar utas, yaitu “kondisi balapan”. Ini adalah keadaan di mana dua utas berusaha untuk mendapatkan dan mengubah informasi yang sama, sehingga membuatnya copyg 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 instance.

Framework 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.

>> int sem_init(sem_t *sem, int pshared, unsigned int value);

Sem_tunggu

Kita 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.

>> int sem_wait(sem_t *sem);

Sem_post

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

>> int sem_post(sem_t *sem);

Sem_getnilai

Jika Anda ingin mengetahui nilai dari sebuah semaphore, Anda harus menggunakan fungsi sem_getvalue di bawah ini. Ini akan mendapatkan n
ilai semafor sekarang dan ditempatkan di tujuan berujung valp.

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

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 *sem);

Instal Utilitas GCC

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

$ sudo apt-get install gcc

Tegaskan tindakan Anda dengan menekan Y.

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 command terminal 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.

$ gcc filename.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 useran 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.

Related Posts