Πώς να χρησιμοποιήσετε το Multithreading στην C++

Pos Na Chresimopoiesete To Multithreading Sten C



Multithreading είναι η έννοια της εκτέλεσης πολλαπλών νημάτων εκτέλεσης μέσα σε ένα μόνο πρόγραμμα. Είναι ένα πολύ χρήσιμο χαρακτηριστικό σε γλώσσες προγραμματισμού όπως η C++ καθώς μας δίνει τη δυνατότητα να εκτελούμε πολλές λειτουργίες ταυτόχρονα. Σε C++, πολυνηματική μπορεί να επιτευχθεί μέσω του <νήμα> βιβλιοθήκη, η οποία παρέχει ένα σύνολο κλάσεων και συναρτήσεων που επιτρέπουν στους προγραμματιστές να δημιουργούν, να διαχειρίζονται και να ελέγχουν πολλαπλά νήματα.

Multithreading είναι ακριβώς όπως το multitasking. Σημαίνει ότι δύο ή περισσότερα νήματα τρέχουν ταυτόχρονα. Σε ένα τέτοιο πρόγραμμα, κάθε στοιχείο αναφέρεται ως νήμα και κάθε νήμα καθορίζει μια μοναδική διαδρομή εκτέλεσης. Δεν υπάρχει ενσωματωμένη υποστήριξη για πολυνηματική προγράμματα πριν από την C++ 11. Αυτή η δυνατότητα παρέχεται εξ ολοκλήρου από το λειτουργικό σύστημα.







Multithreading μπορεί επίσης να αναφέρεται ως διαίρεση ενός προγράμματος σε μικρότερα νήματα που εκτελούνται ταυτόχρονα. Η κλάση νήματος, η οποία χρησιμοποιείται για πολυνηματική σε C++, σας δίνει τη δυνατότητα να δημιουργήσετε πολλά νήματα και να διαχειριστείτε την εκτέλεσή τους.



Δημιουργία νημάτων σε C++

Για να δημιουργήσουμε ένα νήμα στη C++, χρησιμοποιούμε το std::thread κλάση, η οποία περιλαμβάνεται στην ενσωματωμένη βιβλιοθήκη νημάτων. ΕΝΑ κλητός παρέχεται ως όρισμα στον κατασκευαστή ενός αντικειμένου της κλάσης std::thread για να δημιουργήσετε ένα νέο νήμα. Ο κώδικας που εκτελείται όταν ένα νήμα είναι ενεργό είναι γνωστός ως κλητός . Όταν κατασκευάζουμε ένα std::thread αντικείμενο, δημιουργείται ένα νέο νήμα, το οποίο προκαλεί τον κώδικα που παρέχεται από κλητός να τρέξει. Κλήσιμος μπορεί να οριστεί χρησιμοποιώντας αυτές τις τρεις μεθόδους.



Μέθοδος 1: Δείκτης λειτουργίας

Κλήσιμος Οι συναρτήσεις που χρησιμοποιούν δείκτη συνάρτησης μπορούν να οριστούν ως εξής.





void function_call ( Παράμετροι )

Όταν η συνάρτηση έχει κατασκευαστεί, δημιουργείται ένα αντικείμενο νήματος που περιέχει τη συνάρτηση ως εξής:



std::thread thread_obj ( function_call, παράμετροι ) ;

Μέθοδος 2: Αντικείμενο συνάρτησης

Κατά τη χρήση του αντικειμένου συνάρτησης, εκμεταλλευόμαστε την ιδέα της υπερφόρτωσης του χειριστή. Ο κώδικας που πρέπει να εκτελεστεί ενώ σχηματίζεται το νήμα περιέχεται στη συνάρτηση υπερφόρτωσης.

κλάση Object_class {
κενός τελεστής ( ) ( Παράμετροι )
{
// κώδικας που θα εκτελεστεί
}
} ;
std::thread thread_object ( Κλάση_αντικειμένου ( ) , Παράμετροι )

Μέθοδος 3: Έκφραση λάμδα

Κλήσιμος Οι συναρτήσεις που χρησιμοποιούν έκφραση λάμδα μπορούν να οριστούν ως εξής.

αυτόματο f = [ ] ( Παράμετροι ) {
// κώδικας που θα εκτελεστεί
} ;
std::thread thread_object ( f, παράμετροι ) ;

Παράδειγμα Multithreading σε C++

#include
#include <νήμα>
χρησιμοποιώντας namespace std?

void func_thread ( int N )
{
Για ( int i = 0 ; Εγώ < Ν; i++ ) {
cout << 'Νήμα 1 :: καλέσιμο => Χρήση δείκτη συνάρτησης \n ' ;
}
}

κλάση thread_obj {
δημόσιο:
κενός τελεστής ( ) ( int n ) {
Για ( int i = 0 ; Εγώ < n; i++ )
cout << 'Thread 2 :: callable => Χρήση αντικειμένου συνάρτησης \n ' ;
}
} ;

int main ( )
{

αυτόματο f = [ ] ( int n ) {
Για ( int i = 0 ; Εγώ < n; i++ )
cout << 'Thread 3 :: callable => Χρήση έκφρασης λάμδα \n ' ;
} ;

νήμα th1 ( func_thread, 2 ) ;

νήμα th2 ( thread_obj ( ) , 2 ) ;

νήμα th3 ( φά, 2 ) ;

th1.εντάσσομαι ( ) ;

th2.εντάσσομαι ( ) ;

th3.συμμετέχω ( ) ;

ΕΠΙΣΤΡΟΦΗ 0 ;
}

Στον παραπάνω κώδικα, έχουμε αναπτύξει τρία νήματα με τρία ξεχωριστά κλητοί —ένας δείκτης συνάρτησης, ένα αντικείμενο και μια έκφραση λάμδα. Κάθε νήμα ξεκινά ως δύο ξεχωριστές περιπτώσεις. Τρία νήματα είναι ενεργά ταυτόχρονα και χωριστά, όπως υποδεικνύεται στην έξοδο.

Παραγωγή

Πλεονεκτήματα και μειονεκτήματα του Multithreading

Περισσότερες εργασίες μπορούν να γίνουν πιο γρήγορα χάρη σε πολυνηματική . Αυτό συμβαίνει επειδή επιτρέπει σε πολλά νήματα να εκτελούν διάφορες εργασίες ταυτόχρονα. Multithreading επιτρέπει στους προγραμματιστές να κάνουν δραστηριότητες δικτύου, να επεξεργάζονται φωτογραφίες ή βίντεο και να εκτελούν περίπλοκους υπολογισμούς χωρίς να επιβραδύνουν την υπόλοιπη εφαρμογή. Multithreading βοηθά στη βελτίωση της απόκρισης των διεπαφών χρήστη. Εκτελώντας τον κώδικα που αλλάζει την οθόνη σε ξεχωριστό νήμα, το νήμα διεπαφής χρήστη διατηρείται ελεύθερο για την εκτέλεση άλλων εργασιών, όπως η ανταπόκριση στις εισαγωγές χρήστη. Αυτό έχει ως αποτέλεσμα πιο ομαλές και γρήγορες διεπαφές χρήστη.

Ωστόσο, υπάρχουν ορισμένοι περιορισμοί στη χρήση πολυνηματική . Μία από τις βασικές προκλήσεις κατά την εργασία με πολυνηματική προγράμματα είναι η αποφυγή αγωνιστικών συνθηκών. Μια συνθήκη αγώνα είναι μια κατάσταση όπου δύο ή περισσότερα νήματα προσπαθούν να αποκτήσουν πρόσβαση στον ίδιο κοινόχρηστο πόρο την ίδια στιγμή, οδηγώντας σε απρόβλεπτη συμπεριφορά. Για να αποφύγουν τις συνθήκες αγώνα, οι προγραμματιστές χρησιμοποιούν τεχνικές συγχρονισμού, όπως mutexes, σηματοφόρους και εμπόδια.

συμπέρασμα

Multithreading στη C++ είναι μια ισχυρή ιδέα που επιτρέπει στους προγραμματιστές να δημιουργούν προγράμματα που μπορούν να εκτελέσουν πολλές εργασίες ταυτόχρονα. Χρησιμοποιώντας την κλάση νημάτων που παρέχεται από τη βιβλιοθήκη, οι προγραμματιστές μπορούν να δημιουργήσουν, να διαχειριστούν και να ελέγξουν πολλαπλά νήματα. Multithreading μπορεί να χρησιμοποιηθεί για τη βελτίωση της απόδοσης, την αύξηση της ανταπόκρισης και την υπέρβαση των περιορισμών πόρων του συστήματος. Ωστόσο, λόγω των προκλήσεων που συνεπάγεται η εργασία με πολυνηματική προγράμματα, οι προγραμματιστές πρέπει να είναι προσεκτικοί και να χρησιμοποιούν κατάλληλες τεχνικές συγχρονισμού για να αποφύγουν τις συνθήκες αγώνα.