Pthread_join Beberapa Utas Dengan Contoh

Thread adalah sub-proses yang memproses bagian tertentu dari kode dan memiliki buffernya. Dalam tutorial ini, kita akan membahas “pthread_join” dan beberapa contohnya. Set berulir adalah kumpulan utas yang berjalan dalam operasi yang sangat mirip. Di dalam metode, utas adalah aliran seri soliter. Utas sering disebut sebagai proses sembrono karena mereka berbagi beberapa karakteristik proses. Utas, tidak seperti proses, benar-benar tidak otonom satu sama lain, sehingga mereka mengaitkan skrip, informasi, dan service OS mereka seperti dokumen terbuka dan pemicu dengan utas selanjutnya. Eksekusi pthread dapat diperoleh melalui kompiler gcc. Sebelum melangkah lebih jauh, Anda harus memahami dua konsep multithreading POSIX yang akan kita gunakan dalam topik hari ini.

Pthread_create:

Setiap kali kode multi-utas mulai dijalankan, ia hanya memiliki satu proses yang beroperasi, yang melakukan operasi main() program. Utas ini memang memiliki ID prosesnya dan sekarang menjadi utas yang diisi. Metode pthread_create() harus digunakan untuk membuat utas baru dalam skrip.

Pthread_join:

Untuk utas, metode pthread_join() identik dengan menunggu fungsi. Utas panggilan diblokir sebelum utas dengan specifier yang setara dengan pernyataan pertama selesai.

Instal Kompilator GCC:

Saat bekerja pada sistem Linux, Anda harus memiliki beberapa kompiler yang terpasang di sistem Anda untuk mengkompilasi kode C Anda. Yang paling direkomendasikan adalah compiler GCC. Oleh karena itu, masuk dari sistem Linux dan buka terminal konsol menggunakan “Ctrl+Alt+T”. Anda juga dapat membukanya dari bilah pencarian di area Aktivitas. Sekarang terminal dibuka, jalankan perintah instalasi di bawah ini untuk kompiler “gcc” untuk menginstalnya. Tambahkan password akun Anda atas permintaan dan tekan tombol “Enter”. Sekarang kompiler gcc telah diinstal; kami akan mencoba beberapa contoh untuk menguraikan konsep “pthread_join”.

$ sudo apt install gcc

Contoh 01:

Kita harus membuat file baru, “satu,” di editor GNU Nano dengan ekstensi “c”. Ini karena kita akan mengerjakan bahasa C. Cobalah instruksi di bawah ini.

$ nano one.c

Ketik skrip yang ditampilkan di bawah ini di file nano. Kode ini terdiri dari beberapa library yang akan digunakan untuk POSIX multithreading, terutama “pthread.h”. Kami telah membuat metode, “Utas”. Utas tidur selama 1 detik dan mencetak pernyataan. Setelah itu, fungsi utama telah dibuat. Variabel “id” telah digunakan sebagai tipe “pthread_t” untuk mengenali thread. Kemudian pernyataan cetak akan dieksekusi, dan utas POSIX telah dibuat menggunakan fungsi “pthread_create”. Fungsi ini memiliki 4 nilai argumen. Salah satunya adalah variabel pointer “id”, dan yang ketiga adalah fungsi “Thread” yang akan dieksekusi. Semua yang lain adalah default. Pernyataan cetak lain telah digunakan, dan metode utama berakhir.

Simpan file nano dan keluar menggunakan “Ctrl+S” dan “Ctrl+X,” masing-masing. Mari kita kompilasi kode menggunakan compiler “gcc”. Namun pastikan kali ini Anda harus menggunakan flag “-lpthread” pada perintah tersebut. Jika tidak, kode tidak akan dikompilasi dan dieksekusi. Jalankan kueri berikut.

$ gcc one.c –lpthread

Sekarang jalankan skrip melalui instruksi “a.out” seperti di bawah ini. Setiap kali kode telah dieksekusi, fungsi utama beroperasi terlebih dahulu. Jadi, pernyataan cetak telah dieksekusi, dan terminal me
nampilkan “Sebelum Utas”. Kemudian fungsi “pthread_create” telah dijalankan, dan telah dibuat thread baru yang menggunakan fungsi “Thread”. Setelah itu, metode “pthread_join” digunakan untuk memindahkan kontrol ke fungsi “Thread”. Dalam metode “Utas”, program tidur selama 1 detik dan kemudian mengeksekusi pernyataan cetak, yang karenanya terminal menampilkan “Dalam Utas”. Setelah fungsi “Utas” dijalankan, kontrol kembali dipindahkan ke fungsi utama. Dan pernyataan print pada fungsi utama telah dieksekusi sebagai “After Thread”.

$./a.out

Contoh 01:

Mari kita ambil contoh lain dari fungsi “pthread_join”. Kali ini kita tidak akan menggunakan nilai default sebagai argumen untuk sebuah thread. Kami akan memberikan nilai yang tepat untuk utas. Buat file lain “two.c” di editor nano untuk digunakan untuk skrip bahasa C sebagai berikut:

$ nano two.c

Tulis kode C yang ditunjukkan di bawah ini di editor. Kami telah mendefinisikan fungsi “Utas” tanpa implementasi apa pun. Fungsi utama dimulai dengan beberapa variabel tipe integer “i1” dan “i2” yang ditentukan. Kedua variabel tipe integer ini akan digunakan sebagai deskriptor. Dua pengidentifikasi tipe “pthread”, “t1” dan “t2,” dan variabel tipe karakter lainnya, telah digunakan. Dua fungsi “pthread_create” ditentukan untuk membuat dua utas secara terpisah saat menggunakan utas “ID” dan “pesan” sebagai parameternya. Fungsi “Utas” ditentukan sebagai fungsi utas di mana parameter telah diteruskan. Metode “Utas” akan mengambil argumen dan mencetak pesan. Kemudian dua metode “pthread_join” digunakan untuk membatasi fungsi saat ini. Dua pernyataan cetak akan menampilkan beberapa pesan, dan fungsi utama berhenti.

Kompilasi file “two.c” dengan “gcc, beserta flag “-lpthread” sebagai berikut:

$ gcc two.c -lpthread

Mari kita jalankan kode melalui perintah di bawah ini di konsol. Output menampilkan hasil dari dua pernyataan cetak pertama dari fungsi utama sebagai “Utas 1” dan “Utas 2”. Kemudian, karena pembuatan utas, kontrol beralih ke fungsi “Utas”. Setelah menjalankan metode “Utas”, ia kembali ke fungsi utama, dan dua pernyataan cetak lainnya telah dieksekusi.

$./a.out

Kesimpulan:

Terlepas dari engine nyata, utas biasanya berbagi penyimpanannya dengan beberapa utas lainnya (walaupun untuk tugas, kami biasanya memiliki zona penyimpanan yang terpisah untuk masing-masing dari mereka). Mereka semua memiliki referensi ke variabel global yang sangat identik, ruang stack, deskriptor dokumen, dan sebagainya karena mereka berbagi penyimpanan.

Related Posts