Đa luồng trong C++
Đa luồng là việc thực thi đồng thời nhiều luồng trong một quy trình hoặc chương trình. Nó cải thiện hiệu suất và hiệu quả của một ứng dụng bằng cách cho phép nhiều tác vụ được thực thi song song.
Trong C++, hỗ trợ đa luồng có sẵn thông qua thư viện thread được giới thiệu trong tiêu chuẩn C++11.
Tạo luồng cơ bản
Để tạo một luồng mới, hãy bao hàm tệp tiêu đề
#include <iostream>
#include <thread>
void my_function() {
std::cout << "This function is executing in a separate thread" << std::endl;
}
int main() {
std::thread t(my_function);
t.join(); // chờ luồng hoàn thành
return 0;
}
Luồng với đối số
Bạn có thể truyền đối số cho hàm luồng bằng cách cung cấp chúng dưới dạng đối số bổ sung cho hàm tạo std::thread.
#include <iostream>
#include <thread>
void print_sum(int a, int b) {
std::cout << "The sum is: " << a + b << std::endl;
}
int main() {
std::thread t(print_sum, 3, 5);
t.join();
return 0;
}
Mutex và Khóa
Khi nhiều luồng truy cập tài nguyên được chia sẻ, có khả năng xảy ra cuộc chạy đua dữ liệu. Để tránh điều này, hãy sử dụng mutex và khóa để đồng bộ hóa quyền truy cập tài nguyên được chia sẻ.
#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx;
void print_block(int n, char c) {
{
std::unique_lock<std::mutex> locker(mtx);
for (int i = 0; i < n; ++i) {
std::cout << c;
}
std::cout << std::endl;
}
}
int main() {
std::thread t1(print_block, 50, '*');
std::thread t2(print_block, 50, '$');
t1.join();
t2.join();
return 0;
}
Phần giới thiệu ngắn này sẽ giúp bạn bắt đầu với các kỹ thuật đa luồng cơ bản trong C++. Còn rất nhiều điều cần tìm hiểu, chẳng hạn như nhóm luồng, biến điều kiện và hoạt động nguyên tử để điều chỉnh hiệu suất và đồng bộ hóa nâng cao.