Table of Contents
Chương trình đa đọc ở C và C++ cho phép ứng dụng để thực hiện nhiều công việc cùng một lúc, cải thiện hiệu suất và khả năng đáp ứng. Tuy nhiên, thiết kế hệ thống đa đọc hiệu quả đòi hỏi phải tuân theo các nguyên tắc riêng biệt như điều kiện chủng tộc, khóa ngõ, và dữ liệu mâu thuẫn. Bài này vạch ra các nguyên tắc thiết kế khóa được hỗ trợ bởi các ví dụ thực tế.
1. Thu nhỏ dữ liệu chia sẻ
Vẽ dữ liệu chia sẻ giữa các sợi giảm khả năng của các vấn đề đồng bộ hoá. Khi chỉ hoạt động trên dữ liệu độc lập, sự cần thiết khoá các cơ chế giảm, dẫn đến hiệu suất tốt hơn và mã đơn giản hơn. Ví dụ, trong một máy phục vụ Mạng xử lý nhiều yêu cầu, mỗi sợi xử lý dữ liệu yêu cầu của nó mà không cần chia sẻ trạng thái biến đổi.
2. Dùng sự đồng bộ thích hợp
Khi dữ liệu được chia sẻ là cần thiết, sự đồng bộ hóa đúng đắn đảm bảo tính toàn vẹn của dữ liệu. Kỹ thuật viên bao gồm câm, khóa xoay và biến. Ví dụ, mô hình máy sản xuất và máy tính đồng bộ sử dụng biến âm và điều kiện để phối hợp truy cập vào một bộ đệm chung, ngăn chặn điều kiện sắc thái và độ thống nhất về dữ liệu chủng tộc.
3 Tránh những cái bẫy
Khóa bị khóa xảy ra khi các sợi đợi vô hạn cho tài nguyên được giữ lại. Để ngăn chặn, hãy thu thập các ổ khóa theo thứ tự nhất định và giảm thiểu thời gian khoá. Một hệ thống cơ sở dữ liệu là nơi giao dịch có nhiều ổ khóa; thiết lập một lệnh khóa chặt chẽ tránh điều kiện chờ vòng tròn.
Thiết kế cho khả năng cấu hình
Ứng dụng đa luồng có khả năng đọc được hiệu quả khi số mạch tăng lên. Dùng hồ chứa chỉ để quản lý tài nguyên và tránh tạo các sợi quá nhiều. Chẳng hạn, ứng dụng máy phục vụ dùng hồ chứa chỉ để xử lý các kết nối đến, duy trì hiệu suất dưới tải cao.
5. Dùng các hoạt động nguyên tử khi thích hợp
Các thao tác nguyên tử cung cấp bản cập nhật an toàn chỉ để chia sẻ các biến mà không khoá riêng. Chúng có ích cho các đối số hay cờ. Ví dụ, tăng số đếm chia sẻ bằng cách sử dụng nguyên tử lấy và thêm bảo đảm tính chính xác mà không khoá trên đầu.