Cách sử dụng đa luồng trong C++

Cach Su Dung Da Luong Trong C



đa luồng là khái niệm chạy nhiều luồng thực thi trong một chương trình. Đây là một tính năng rất hữu ích trong các ngôn ngữ lập trình như C++ vì nó cho phép chúng ta thực hiện đồng thời nhiều thao tác. Trong C++, đa luồng có thể đạt được thông qua thư viện, cung cấp một tập hợp các lớp và chức năng cho phép các nhà phát triển tạo, quản lý và kiểm soát nhiều luồng.

đa luồng giống như đa nhiệm. Nó có nghĩa là hai hoặc nhiều luồng đang chạy đồng thời. Trong một chương trình như vậy, mỗi thành phần được gọi là một luồng và mỗi luồng chỉ định một đường thực thi duy nhất. Không có hỗ trợ tích hợp cho đa luồng các chương trình trước C++ 11. Thay vào đó, tính năng này hoàn toàn do hệ điều hành cung cấp.







đa luồng cũng có thể được gọi là chia chương trình thành các luồng nhỏ hơn thực thi đồng thời. Lớp chủ đề, được sử dụng cho đa luồng trong C++, cho phép bạn xây dựng nhiều luồng và quản lý việc thực thi chúng.



Tạo chủ đề trong C++

Để tạo một thread trong C++, chúng ta sử dụng std::chủ đề lớp, được bao gồm trong thư viện luồng tích hợp. MỘT gọi được được cung cấp như một đối số cho hàm tạo của một đối tượng của lớp std::chủ đề để tạo ra một chủ đề mới. Mã được thực thi khi một luồng đang hoạt động được gọi là gọi được . Khi chúng ta xây dựng một std::chủ đề đối tượng, một luồng mới được thiết lập, khiến mã được cung cấp bởi gọi được được điều hành. Có thể gọi có thể được xác định bằng ba phương pháp này.



Cách 1: Con trỏ hàm

Có thể gọi chức năng sử dụng một con trỏ chức năng có thể được định nghĩa như thế này.





hàm void_call ( thông số )

Khi chức năng đã được xây dựng, một đối tượng luồng chứa chức năng được tạo như sau:



std::thread thread_obj ( function_call, tham số ) ;

Cách 2: Đối tượng hàm

Trong khi sử dụng đối tượng hàm, chúng ta tận dụng ý tưởng nạp chồng toán tử. Mã phải được chạy trong khi luồng đang được hình thành được chứa trong hàm quá tải.

lớp Object_class {
toán tử void ( ) ( thông số )
{
// mã được thực thi
}
} ;
std::thread thread_object ( đối tượng_class ( ) , thông số )

Phương pháp 3: Biểu thức Lambda

Có thể gọi các hàm sử dụng biểu thức lambda có thể được định nghĩa như thế này.

tự động f = [ ] ( thông số ) {
// mã được thực thi
} ;
std::thread thread_object ( f, tham số ) ;

Ví dụ về đa luồng trong C++

#include
#bao gồm
sử dụng không gian tên std;

vô hiệu func_thread ( int N )
{
( int tôi = 0 ; Tôi < N; tôi ++ ) {
cout << 'Luồng 1 :: có thể gọi được => Sử dụng con trỏ hàm \N ' ;
}
}

lớp chủ đề_obj {
công cộng:
toán tử void ( ) ( int n ) {
( int tôi = 0 ; Tôi < N; tôi ++ )
cout << 'Chủ đề 2 :: có thể gọi được => Sử dụng một đối tượng chức năng \N ' ;
}
} ;

int chính ( )
{

tự động f = [ ] ( int n ) {
( int tôi = 0 ; Tôi < N; tôi ++ )
cout << 'Chủ đề 3 :: có thể gọi được => Sử dụng biểu thức lambda \N ' ;
} ;

chủ đề th1 ( func_thread, 2 ) ;

chủ đề th2 ( thread_obj ( ) , 2 ) ;

chủ đề th3 ( f, 2 ) ;

th1.tham gia ( ) ;

th2.tham gia ( ) ;

th3.tham gia ( ) ;

trở lại 0 ;
}

Trong đoạn mã trên, chúng ta đã phát triển ba luồng với ba luồng riêng biệt có thể gọi được —một con trỏ hàm, một đối tượng và một biểu thức lambda. Mỗi luồng được bắt đầu dưới dạng hai phiên bản riêng biệt. Ba luồng đang hoạt động đồng thời và riêng biệt, như được chỉ ra trong đầu ra.

đầu ra

Ưu điểm và nhược điểm của đa luồng

Nhiều công việc có thể được thực hiện nhanh hơn nhờ đa luồng . Điều này là do nó cho phép nhiều luồng thực hiện các nhiệm vụ khác nhau cùng một lúc. đa luồng cho phép các lập trình viên thực hiện các hoạt động mạng, xử lý ảnh hoặc video và thực hiện các tính toán phức tạp mà không làm chậm phần còn lại của ứng dụng. đa luồng giúp làm cho giao diện người dùng phản ứng nhanh hơn. Bằng cách chạy mã thay đổi màn hình trong một chuỗi riêng biệt, chuỗi giao diện người dùng được giữ miễn phí để thực hiện các tác vụ khác, chẳng hạn như phản hồi đầu vào của người dùng. Điều này dẫn đến giao diện người dùng mượt mà và nhanh hơn.

Tuy nhiên, có một số hạn chế khi sử dụng đa luồng . Một trong những thách thức chính khi làm việc với đa luồng các chương trình đang tránh các điều kiện cuộc đua. Điều kiện tương tranh là tình huống trong đó hai hoặc nhiều luồng đang cố truy cập vào cùng một tài nguyên được chia sẻ cùng một lúc, dẫn đến hành vi không thể đoán trước. Để tránh điều kiện chủng tộc, các nhà phát triển sử dụng các kỹ thuật đồng bộ hóa như mutexes, semaphores và các rào cản.

Phần kết luận

đa luồng trong C++ là một khái niệm mạnh mẽ cho phép các nhà phát triển tạo ra các chương trình có thể thực hiện đồng thời nhiều tác vụ. Bằng cách sử dụng lớp luồng do thư viện cung cấp, nhà phát triển có thể tạo, quản lý và kiểm soát nhiều luồng. đa luồng có thể được sử dụng để cải thiện hiệu suất, tăng khả năng phản hồi và khắc phục các hạn chế về tài nguyên hệ thống. Tuy nhiên, do những thách thức liên quan đến làm việc với đa luồng các chương trình, các nhà phát triển cần phải cẩn thận và sử dụng các kỹ thuật đồng bộ hóa thích hợp để tránh các điều kiện chạy đua.