Cara Menggunakan Multithreading di C++

Cara Menggunakan Multithreading Di C



Multithreading adalah konsep menjalankan banyak utas eksekusi dalam satu program. Ini adalah fitur yang sangat berguna dalam bahasa pemrograman seperti C++ karena memungkinkan kita melakukan banyak operasi secara bersamaan. Di C++, multithreading dapat dicapai melalui library, yang menyediakan sekumpulan kelas dan fungsi yang memungkinkan developer membuat, mengelola, dan mengontrol banyak utas.

Multithreading sama seperti multitasking. Ini berarti dua atau lebih utas berjalan secara bersamaan. Dalam program seperti itu, setiap komponen disebut sebagai utas, dan setiap utas menentukan jalur eksekusi yang unik. Tidak ada dukungan bawaan untuk multithread program sebelum C++ 11. Fitur ini disediakan sepenuhnya oleh sistem operasi.







Multithreading juga dapat disebut membagi program menjadi utas yang lebih kecil yang dijalankan secara bersamaan. Kelas utas, yang digunakan untuk multithreading di C++, memungkinkan Anda membuat banyak utas dan mengelola eksekusinya.



Buat Utas di C++

Untuk membuat utas di C++, kami menggunakan std::utas kelas, yang termasuk dalam pustaka utas bawaan. A dapat dipanggil disediakan sebagai argumen untuk konstruktor objek kelas std::utas untuk menghasilkan thread baru. Kode yang dijalankan saat utas aktif dikenal sebagai dapat dipanggil . Ketika kita membangun a std::utas objek, utas baru dibuat, yang menyebabkan kode disediakan oleh dapat dipanggil untuk dijalankan. Dapat dipanggil dapat ditentukan dengan menggunakan ketiga metode tersebut.



Metode 1: Penunjuk Fungsi

Dapat dipanggil fungsi menggunakan pointer fungsi dapat didefinisikan seperti ini.





membatalkan fungsi_panggilan ( parameter )

Saat fungsi telah dibangun, objek utas yang berisi fungsi dihasilkan sebagai berikut:



std::utas thread_obj ( function_call, parameter ) ;

Metode 2: Objek Fungsi

Saat menggunakan objek fungsi, kami memanfaatkan gagasan kelebihan beban operator. Kode yang harus dijalankan saat utas sedang dibentuk terkandung dalam fungsi kelebihan beban.

kelas Objek_kelas {
operator batal ( ) ( parameter )
{
// kode yang akan dieksekusi
}
} ;
std::utas thread_object ( Kelas_objek ( ) , parameter )

Metode 3: Ekspresi Lambda

Dapat dipanggil fungsi menggunakan ekspresi lambda dapat didefinisikan seperti ini.

otomatis f = [ ] ( parameter ) {
// kode yang akan dieksekusi
} ;
std::utas thread_object ( f, parameter ) ;

Contoh Multithreading di C++

#termasuk
#sertakan
menggunakan namespace std;

batal func_thread ( int N )
{
untuk ( int saya = 0 ; Saya < N; saya++ ) {
cout << 'Utas 1 :: dapat dipanggil => Menggunakan penunjuk fungsi \N ' ;
}
}

kelas thread_obj {
publik:
operator batal ( ) ( int n ) {
untuk ( int saya = 0 ; Saya < N; saya++ )
cout << 'Utas 2 :: callable => Menggunakan objek fungsi \N ' ;
}
} ;

int utama ( )
{

otomatis f = [ ] ( int n ) {
untuk ( int saya = 0 ; Saya < N; saya++ )
cout << 'Utas 3 :: dapat dipanggil => Menggunakan ekspresi lambda \N ' ;
} ;

benang th1 ( func_thread, 2 ) ;

benang th2 ( thread_obj ( ) , 2 ) ;

benang th3 ( F, 2 ) ;

th1.join ( ) ;

th2.join ( ) ;

th3.join ( ) ;

kembali 0 ;
}

Dalam kode di atas, kami telah mengembangkan tiga utas dengan tiga utas terpisah callable —penunjuk fungsi, objek, dan ekspresi lambda. Setiap utas dimulai sebagai dua contoh terpisah. Tiga utas aktif secara bersamaan dan terpisah, seperti yang ditunjukkan pada output.

Keluaran

Kelebihan dan Kekurangan Multithreading

Lebih banyak pekerjaan dapat dilakukan lebih cepat berkat multithreading . Ini karena memungkinkan banyak utas untuk melakukan berbagai tugas sekaligus. Multithreading memungkinkan pemrogram untuk melakukan aktivitas jaringan, memproses foto atau video, dan melakukan perhitungan yang rumit tanpa memperlambat aplikasi lainnya. Multithreading membantu dalam membuat antarmuka pengguna lebih responsif. Dengan menjalankan kode yang mengubah layar dalam utas terpisah, utas UI tetap bebas untuk melakukan tugas lain, seperti menanggapi input pengguna. Ini menghasilkan antarmuka pengguna yang lebih halus dan lebih cepat.

Namun, ada beberapa batasan untuk digunakan multithreading . Salah satu tantangan utama saat bekerja dengan multithread program menghindari kondisi balapan. Kondisi balapan adalah situasi di mana dua atau lebih utas mencoba mengakses sumber daya bersama yang sama pada saat yang sama, yang mengarah ke perilaku yang tidak dapat diprediksi. Untuk menghindari kondisi balapan, pengembang menggunakan teknik sinkronisasi seperti mutex, semaphore, dan barrier.

Kesimpulan

Multithreading di C ++ adalah konsep kuat yang memungkinkan pengembang membuat program yang dapat melakukan banyak tugas secara bersamaan. Dengan menggunakan kelas utas yang disediakan oleh perpustakaan, pengembang dapat membuat, mengelola, dan mengontrol beberapa utas. Multithreading dapat digunakan untuk meningkatkan kinerja, meningkatkan daya tanggap, dan mengatasi keterbatasan sumber daya sistem. Namun, karena tantangan yang terlibat dalam bekerja dengan multithread program, pengembang harus berhati-hati dan menggunakan teknik sinkronisasi yang sesuai untuk menghindari kondisi balapan.