POSIX Semaphores dengan Pengaturcaraan C

Posix Semaphores With C Programming

POSIX merujuk kepada Antaramuka Mudah Alih OS, yang merupakan standard IEEE, yang dikembangkan untuk membantu mudah alih aplikasi yang berbeza. POSIX adalah usaha untuk membina versi standard UNIX yang biasa melalui kolaborasi vendor. Ini akan menjadikan aplikasi porting di antara platform perkakasan lebih mudah jika berkesan. Hewlett-Packard mengintegrasikan POSIX ke dalam MPE / iX OS versi 5.0 dan HP / UXX versi 10.0 berlesen masing-masing (UNIXnya).

POSIX standard mempunyai lebih dari sepuluh bahagian, namun dua mudah diperoleh. POSIX.1 menerangkan antara muka pengaturcaraan C (iaitu, pustaka panggilan sistem) untuk fail, prosedur, dan terminal I / O. Pustaka pakej C POSIX untuk platform POSIX adalah kerangka perpustakaan standard C. Ini dibuat bersamaan dengan ANSI standard C. Untuk memastikan POSIX mematuhi standard C, beberapa percubaan telah dilakukan. POSIX memberikan ciri tambahan kepada yang dilaksanakan dalam standard C.



POSIX Semaphores

Semaphore adalah struktur data yang sering digunakan untuk menyegerakkan proses dan membantu utas tanpa interaksi antara satu sama lain untuk beroperasi bersama. Antara muka untuk semaphores ditentukan oleh standard POSIX. Ia bukan sebahagian daripada Pthreads. Walau bagaimanapun, kebanyakan UNIX yang menyokong Pthreads bahkan menyediakan semaphore. Dalam kerangka seperti Unix, seperti Linux, semaphores digabungkan dengan antrian mesej dan memori bersama di bawah perkhidmatan Interprocess Communication (IPC). Semaphores kerangka V yang lebih tua dan semaphores POSIX moden menjadi dua jenis semaphores. Panggilan Semaphore POSIX jauh lebih mudah daripada panggilan Semaphore Sistem V. Walaupun, semaphores Sistem V lebih mudah diperoleh, terutama pada platform seperti Unix sebelumnya. Terdapat keperluan untuk menghubungkan program menggunakan semaphores POSIX ke perpustakaan Pthread. Kami akan melihat semifora POSIX dalam artikel ini.



Mengapa POSIX Semaphores?

Terdapat masalah besar di sekitar utas, iaitu keadaan perlumbaan. Ini adalah keadaan di mana dua utas berusaha mendapatkan dan mengubah maklumat yang sama, sehingga menjadikannya bertentangan. Untuk mengelakkan keadaan perlumbaan, kami telah menggunakan semaphores sejak sekian lama.



Semaphores boleh didapati dalam 2 jenis:

Semaphore Perduaan :

Ia juga dikenali sebagai kunci mutex. Ia hanya akan mempunyai dua nilai yang mungkin, 0 dan 1. Nilai akan diinisialisasi sebagai 1. Nilai ini digunakan untuk menegakkan banyak proses untuk menyelesaikan masalah bahagian yang serius.



Mengira Semaphore :

Ukurannya boleh berbeza-beza di domain yang tidak terhad. Ini digunakan untuk memiliki otoritas atas akses ke sumber daya yang banyak.

Rangka kerja Linux POSIX mempunyai repositori Semaphore yang bersepadu. Untuk menggunakannya, kita mesti:

  • Tambah semaphore.h
  • Tumpukan kod dengan menghubungkan dengan -lpthread -lrt.

Hampir semua kaedah dan bentuk POSIX Semaphore dilindungi atau dinyatakan dalam ‘Semaphore.h’. Kami akan menggunakan Semaphore untuk menggambarkan entiti atau objek sebagai:

>>sem_t sem_nama;

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

Sem_init

Untuk memulakan semaphore, anda harus menggunakan kaedah sem_init. Dalam fungsi ini, sem sesuai dengan objek semaphore yang diinisialisasi. Pshared adalah sepanduk atau bendera yang menentukan sama ada semaphore dapat dikongsi dengan prosedur bercabang () atau tidak. Semaphore yang dikongsi sekarang tidak disokong oleh LinuxThreads. Nilai argumen adalah nilai permulaan di mana semaphore ditetapkan.

>> intsem_init(sem_t*sem, intpshared, tidak bertandatangan intnilai);

Sem_wait

Kami akan menggunakan kaedah sem-waiting untuk menahan / mengunci semaphore atau membuatnya menunggu. Sekiranya semaphore telah diberikan nilai negatif, maka kitaran panggilan akan disekat secara automatik. Bila ada thread lain memanggil sem_post, salah satu proses yang sudah tersumbat terjaga.

>> intsem_wait(sem_t*sem);

Sem_post

Kami akan menggunakan kaedah sem_post untuk meningkatkan nilai semaphore. Setelah menelefon, sem_post akan menambah nilainya, dan salah satu proses yang sudah tersumbat atau menunggu terjaga.

>> intsem_pos(sem_t*sem);

Nilai Sem_get

Sekiranya anda ingin mengetahui tentang nilai semaphore, anda harus menggunakan fungsi sem_getvalue di bawah. Ia akan memperoleh nilai sekarang dari semaphore dan ditempatkan di destinasi berujung valp.

>>Nilai sem_get int(sem_t*sem, int *anak anjing);

Sem_destroy

Anda semestinya menggunakan kaedah sem_destroy jika anda mahu memusnahkan semaphore. Sekiranya kematian semaphore diteruskan, tidak ada benang yang akan menunggu di semaphore.

>>Int sem_destroy(sem_t*sem);

Pasang Utiliti GCC

Untuk menyusun kod POSIX Semaphore C, anda mesti memasang utiliti gcc dalam sistem Linux anda. Untuk tujuan ini, buka terminal arahan anda dan cuba arahan di bawah.

$sudo apt-get pasang gcc

Tegaskan tindakan anda dengan memukul DAN .

Pelaksanaan POSIX Semaphore dengan pengaturcaraan C di Ubuntu

Pada awalnya, anda harus membuat fail baru dengan sambungan .cpp pada sistem Ubuntu 20.04. Untuk ini, anda harus menavigasi ke Direktori Rumah anda dan membuat fail kosong baru bernama new.cpp. Anda juga boleh membuatnya menggunakan perintah sentuh di terminal arahan anda.

Anda dapat melihat bahawa fail baru.cpp telah dibuat di Home Directory.


Selepas pembuatan fail .cpp, buka sebagai Penyunting Teks dalam sistem Linux anda dan tuliskan kod di bawah ini dalam fail ini sebagaimana adanya. Selepas 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 fail.

$gccnama fail.c –lpthread –lrt

Terdapat 2 utas yang terbentuk, satu dibentuk setelah 2 saat yang lain. Setelah menerima bolt, utas pertama tidur selama 4 saat. Jadi, setelah dipanggil, utas kedua tidak akan bergabung secara langsung, dan ini akan muncul 4-2 = 2 saat setelah dipanggil. Inilah outputnya:

Sekiranya kita tidak menggunakan semaphore, menurut peralihan konteks, hasilnya mungkin seperti yang diperhatikan:

Kesimpulannya

Dalam panduan ini, gambaran keseluruhan terperinci mengenai penggunaan POSIXSemaphore dengan pengaturcaraan C di Ubuntu 20 telah diberikan. Dengan hanya menggunakan perpustakaan POSIX atau Pthread di seluruh kod C tertentu, POSIX Semaphore dapat dengan mudah digunakan untuk mengelakkan keadaan perlumbaan semasa pengekodan.