Bagaimana Mengimplementasikan Multithreading di C++

Bagaimana Mengimplementasikan Multithreading Di C



Multithreading di C++ adalah fitur yang memungkinkan seseorang melakukan banyak tugas secara bersamaan secara bersamaan. Thread adalah unit kerja dari proses tertentu yang sedang dijalankan. Banyak thread yang dijalankan secara independen satu sama lain pada saat yang sama untuk melakukan multithreading.

Bagaimana Mengimplementasikan Multithreading di C++

Program multithread memiliki dua bagian atau lebih yang memiliki kecenderungan untuk dijalankan secara bersamaan, masing-masing bagian dikenal sebagai thread dan memiliki jalur eksekusi yang berbeda. Banyak thread yang dijalankan secara independen satu sama lain pada saat yang sama untuk melakukan multithreading.







Prasyarat untuk Multithreading di C++

Di Windows, fungsi yang terkait dengan thread dapat dijalankan di C++ 11 dan versi lanjutan. Sedangkan menggunakan compiler Dev-C++ secara default berada pada versi C++ 3 sehingga perlu diubah ke versi C++ 11 secara manual. Lingkungan GNU C++11 dapat dipilih dengan mengubah pengaturan standar bahasa.



Buka kompiler Dev-C++ dan buka “Alat” di bilah tugas. Pilih 'Opsi Kompiler' lalu pilih 'Pengaturan', klik pada blok 'Pembuatan Kode', daftar perintah akan muncul. Pilih GNU C++11 dari “Standar Bahasa(-std)” dan kemudian klik OK. Sekarang kompiler ini siap untuk mendukung operasi thread.




Unduh perpustakaan dari GitHub dan letakkan di folder lib kompiler Cpp. Panggil perpustakaan ini dalam program menggunakan #include “mingw.thread.h” dan file header , di bawah ini sintaksnya:





std::utas thread_object ( dapat dipanggil ) ;


std::thread didukung oleh file header #include “mingw.thread.h” di C++11. Ini adalah kelas thread dan mewakili satu thread. Thread baru dibuat menggunakan std::thread dan callable diteruskan ke thread tersebut. Callable adalah kode yang dapat dieksekusi, yang dieksekusi saat thread berjalan. Callable dapat berupa salah satu dari tiga jenis yang diberikan di bawah ini:

Saat sebuah objek dibuat, ia meluncurkan thread baru, yang mengeksekusi kode di callable.



Peluncuran Thread menggunakan Objek Fungsi

Objek fungsi dapat digunakan sebagai callable untuk meluncurkan thread, operator kelebihan beban () membuatnya dapat dipanggil:

kelas function_object_class {
operator kosong ( ) ( param )
{
Pernyataan;
}
}
std::utas thread_object ( fungsi_objek_kelas ( ) , param )


Fungsi kelebihan beban diberikan kepada konstruktor sebagai objek pertama dan pernyataan sebagai objek kedua.

Peluncuran Thread menggunakan Function Pointer

Sebuah penunjuk fungsi didefinisikan, dan kemudian digunakan sebagai callable untuk meluncurkan thread:

batalkan fungsi_panggilan ( param )
{
Pernyataan;
}
std::utas thread_obj ( fungsi_panggilan, params ) ;


Argumen yang akan disampaikan ditulis setelah nama fungsinya.

Peluncuran Thread menggunakan Ekspresi Lambda

Objek thread dapat diluncurkan menggunakan lambda sebagai callable.

// Tentukan ekspresi lambda
otomatis f = [ ] ( param )
{
Pernyataan;
} ;

std::utas thread_object ( f, param ) ;


Ekspresi lambda ditentukan, dan parameter dipanggil di dalamnya untuk meluncurkan thread.

Dalam beberapa kasus, thread harus dihentikan sebelum mulai menjalankan perintah berikutnya. Itu std::utas::gabung () fungsi digunakan untuk menunggu thread berakhir. Misalnya, jika kita menugaskan tugas GUI ke thread, kita harus menunggu hingga waktu selesainya agar GUI dapat dimuat dengan benar terlebih dahulu, lalu eksekusi perintah berikutnya akan dilakukan.

ke utama ( )
{

std::utas t1 ( dapat dipanggil ) ;
t1.gabung ( ) ;
Pernyataan;
}

Contoh

Ini adalah program yang dijalankan untuk melakukan multithreading menggunakan ketiga callable. Tiga callable berbeda menjalankan perintahnya masing-masing secara bersamaan sebanyak tiga kali tanpa diinterupsi satu sama lain:

#termasuk
#sertakan
menggunakan namespace std;


batal foo ( ke dalam Z )
{
untuk ( ke dalam saya = 0 ; Saya < Z; saya++ ) {
cout << 'Utas menggunakan fungsi'
' penunjuk sebagai dapat dipanggil \N ' ;
}
}


kelas thread_obj {
publik:
operator kosong ( ) ( ke dalam x )
{
untuk ( ke dalam saya = 0 ; Saya < X; saya++ )
cout << 'Utas menggunakan fungsi'
' objek sebagai dapat dipanggil \N ' ;
}
} ;


// kode utama
ke utama ( )
{
cout << 'Utas 1 dan 2 dan 3'
'beroperasi secara mandiri'
<< akhir;


benang th1 ( foo, 3 ) ;


benang th2 ( thread_obj ( ) , 3 ) ;


otomatis f = [ ] ( ke dalam x ) {
untuk ( ke dalam saya = 0 ; Saya < X; saya++ )
cout << 'Utas menggunakan lambda'
' ekspresi yang bisa dipanggil \N ' ;
} ;


benang th3 ( F, 3 ) ;

th1.bergabung ( ) ;

th2.bergabung ( ) ;

th3.bergabung ( ) ;

kembali 0 ;
}


Dalam program ini tiga callable termasuk penunjuk fungsi, objek fungsi, dan ekspresi lambda digunakan untuk meluncurkan tiga thread secara bersamaan. Thread 1, 2, dan 3 mencetak nilainya secara bersamaan, independen satu sama lain, tanpa diinterupsi satu sama lain. Mereka mencetak nilai-nilai mereka tiga kali. Fungsi join() digunakan untuk menunggu thread berakhir.


Output dari ketiga thread ditampilkan secara independen dan diulang tiga kali. Masing-masing thread menunggu thread lainnya berakhir terlebih dahulu.

Kesimpulan

Multithreading di C++ adalah fitur yang memungkinkan seseorang melakukan banyak tugas secara bersamaan secara bersamaan. Program multithread memiliki dua atau lebih bagian yang dapat berjalan secara bersamaan, setiap bagian dikenal sebagai thread dan memiliki jalur eksekusi terpisah. Ada tiga callable untuk meluncurkan thread, penunjuk fungsi, objek fungsi, dan ekspresi lambda. Ini mengaktifkan multithreading.