Pengaturcaraan C

Benang POSIX dengan Pengaturcaraan C

Benang POSIX dengan Pengaturcaraan C
Benang adalah contoh kecil yang berjalan dalam proses. Benang bergabung untuk membuat proses, dan mereka mempunyai beberapa sifat proses; oleh itu, mereka dianggap sebagai proses ringan. Benang tidak bebas, sama seperti proses. Sebaliknya mereka bekerjasama untuk menyusun dan membuat proses. Namun, seperti prosesnya, utas juga memiliki PC sendiri (Program Counter) dan set daftar tertentu bersama dengan ruang tumpukan.

Benang POSIX:

Dalam platform Linux, API standard pthread bahasa C dan C ++ untuk semua jenis fungsi yang berkaitan dengan utas. Ia juga dikenali sebagai utas POSIX yang membolehkan pengguna membuat banyak utas agar proses serentak mengalir. Ia paling baik digunakan dalam sistem multi-teras atau pemproses untuk menerapkan utas pada kernel untuk mencapai sistem tersebut.

Pelaksanaan:

Perlu memasukkan pthread ini.h header file dalam skrip pada mulanya. Ini akan membantu dalam penggunaan fungsi pthreads library. Untuk melaksanakan fail c, perintah berikut

$ cc -pthread fail.c

ATAU

$ cc -lpthread fail.c

Fungsi yang ditentukan di pustaka pthreads boleh merangkumi:

pthread_create:

Ia digunakan untuk membuat utas baru

Parameter pthread_create:

Ia mempunyai parameter berikut:

utas: Ini bertindak sebagai penunjuk kepada nilai integer yang tidak ditandatangani. Ia mengembalikan id utas benang yang terbentuk.

atribut: Parameter ini bertindak sebagai penunjuk kepada struktur. Ini digunakan untuk menentukan atribut utas yang dapat menjadi kebijakan penjadualan, dan alamat tumpukan, dll.

permulaan_rutin: Parameter ini adalah penunjuk ke subrutin yang dilaksanakan oleh utas.

hujah: Parameter ini adalah penunjuk untuk dibatalkan dengan argumen yang berbeza dengan fungsi yang telah ditentukan pada awal argumen

Sintaks:

>> int pthread_create
(pthread_t * thread, const pthread_attributes_t * attr, void * (* start_routine) (void *), void * argumen);

pthread_exit:

Ia digunakan untuk menamatkan atau mengakhiri utas

Parameter pthread_exit:

Kaedah yang digunakan pada akhir kaedah / proses menerima selang parameter yang merupakan penunjuk wajib kepada bilangan bulat. Ia menyimpan status utas sehingga benang berakhir. Ia mestilah pemboleh ubah global. Ini akan membolehkan jalinan seterusnya bergabung dengan utas sekiranya ada.

Sintaks:

>> void pthread_exit (kekosongan * retval);

pthread_join:

Ini adalah fungsi yang digunakan pada masa menunggu penamatan utas.

Parameter untuk pthread_join:

Parameter yang digunakan di sini adalah:

utas_id: Ini adalah ID benang yang menunggu utas dalam barisan.

thread_return: Ini adalah parameter yang bertindak sebagai penunjuk ke lokasi tertentu di mana kita telah menentukan status keluar.

Sintaks:

>> int pthread_join (pthread_t thread_identification, batal ** thread_return);

pthread_self:

Ini adalah kaedah yang digunakan untuk mendapatkan id benang yang kini sesuai.

Sintaks:

>> pthread_t pthread_self (tidak sah);

pthread_equal:

Kaedah ini digunakan untuk membandingkan sekiranya dua utas setara atau tidak. Sekiranya dua utas sama, maka fungsi akan mengembalikan nilai selain sifar sebagai tindak balas.

Sintaks:

>> int pthread_equal (pthread_t thread1, pthread_t thread2);

pthread_cancel:

Kaedah ini digunakan untuk menghantar permintaan pembatalan

Parameter untuk pthread_cancel:

Parameter yang digunakan wajib dimasukkan untuk membatalkan permintaan.

Sintaks:

>> int pthread_cancel (pthread_t threadName);

pthread_detach:

Ini adalah kaedah yang digunakan untuk memisahkan utas. Ia tidak memerlukan sebarang utas untuk menyertai penamatan. Semua sumber yang berjalan di utas dilepaskan sebaik sahaja benang dilepaskan.

Parameter pthread_detachr:

Parameter inilah yang menerima id utas parameter wajib. Ia mesti dilepaskan.

Sintaks:

>> int pthread_detach (utas pthread_t);

Contoh kod:

Berikut adalah contoh kod untuk menunjukkan pelaksanaan fungsi yang dinyatakan di atas. Kami menggunakan penyusun gcc untuk menyusun fungsi ini.

// Program untuk menunjukkan fungsi utas
#sertakan
#sertakan
#sertakan
// Memanggil benang POSIX, yang mesti ada dalam sistem UNIX / LINUX
pthread_t tid [2];
void * Fungsi (void * arg)

panjang tidak ditandatangani i = 0;
pthread_t id = pthread_self ();
jika (pthread_equal (id, tid [0]))
// Keadaan agar benang sama

printf ("\ n Benang pertama sedang diproses \ n");

yang lain

printf ("\ n Benang kedua sedang diproses \ n");

// Benang sedang diproses.
untuk (i = 0; i<(0x255);i++);
kembali NULL;

int utama (tidak sah)

int i = 0;
ralat int;
// Membuat utas baru
Sementara saya < 2)

ralat = pthread_create (& (tid [i]), NULL, & Function, NULL);
sekiranya (ralat != 0)
printf ("\ n Tidak dapat membuat utas: [% s]", strerror (ralat));
yang lain
printf ("\ n Thread berjaya dibuat \ n");
// Benang berjaya dibuat
saya ++;

tidur (5);
pulangan 0;

Kod tersebut ditulis dalam penyunting teks; anda boleh menggunakan mana-mana editor berdasarkan pilihan anda. Kemudian simpan di lokasi kegemaran anda.

Fail disimpan dalam sistem komputer dan kemudian diakses. Fail yang disimpan oleh kami dinamakan ujian.c. Untuk mengaksesnya, ketik perintah berikut di tetingkap terminal:

ujian $ sudo gcc.c -lpthread

Seterusnya, untuk melaksanakan output, ketik perintah berikut:

$ ./ a.keluar

Hasil yang diharapkan:

Keluaran yang kami dapat sebagai tindak balas kepada kod sebelumnya ditunjukkan di bawah:

Kesimpulan:

Tutorial ini merangkumi proses asas pembuatan benang dan membincangkan semua kaedah yang biasa digunakan dalam pembuatannya. Thread adalah contoh proses. Kami kemudian memandu pengguna melalui parameter terkenal yang digunakan oleh setiap proses bersama dengan sintaks sehingga mereka dapat memanfaatkannya dalam program komputer mereka. Di sini kami juga berkongsi kod contoh sebagai contoh untuk lebih memahami idea membuat program C di POSIX. Penyusun yang kami gunakan adalah gcc dalam sistem Linux. Pengguna boleh memilih penyusun lain juga berdasarkan pilihan mereka.

5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...
Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...