tailieunhanh - Hệ điều hành Linux - Bài 7a: Lập trình đa tuyến (multi –thread)

Nội dung tài liệu trình bày lý thuyết về tuyến, định nghĩa về tuyến, lý do phải dùng tuyến, tạo lập và hủy tuyến, chờ tuyến kết thúc, chờ tuyến hoàn thành xong tác vụ, chờ đồng thời nhiều tuyến, đồng bộ hóa tuyến với đối tượng mutex, tạo và khởi động mutex, khóa và tháo khóa cho mutex, hủy mutex và một số bài tập thực hành. | BÀI 7 LẬP TRÌNH ĐA TUYẾN (MULTI –THREAD) I. Lý Thuyết 1. Tuyến là gì ? Tại sao phải dùng tuyến (thread) Tuyến là một phần của tiến trình sở hữu riêng ngăn xếp (stack) và thực thi độc lập ngay trong mã lệnh của tiến trình. Nếu như một HĐH có nhiều tiến trình thì bên trong mỗi tiến trình lại có thể tạo ra nhiều tuyến hoạt động song song với nhau tương tự như cách tiến trình hoạt động song song bên trong HĐH. Ưu điểm của tuyến là chúng hoạt động trong cùng không gian địa chỉ của tiến trình. Cơ chế liên lạc giữa các tuyến đơn giản và hiệu quả. Đối với HĐH, chi phí chuyển đổi ngữ cảnh của tiến trình cao và chậm hơn chí phí chuyển đổi ngữ cảnh dành cho tuyến. 2. Tạo lập và hủy tuyến Khi chương trình chính bắt đầu, nó chính là một tuyến. Tuyến điều khiển hàm main() được gọi là tuyến chính. Các tuyến khác do tiến trình tạo ra sau đó được gọi là tuyến phụ. Mỗi tuyến được cung cấp cho một số định danh gọi là thread ID. Để tạo ra một tuyến mới ngoài tuyến chính, bạn gọi hàm pthread_create(). Hàm này được khai báo như sau: #include int pthread_create ( pthread_t * thread, pthread_attr_t* attr, void* (*start_routine) (void*), void* arg); Hàm pthread_create () nhận 4 tham số, tham số thứ nhất có kiểu cấu trúc pthread_t để lưu các thông tin về tuyến sau khi tạo ra. Tham số thứ hai dùng để đặt thuộc tính cho tuyến (trong trường hợp ta đặt giá trị NULL thì tuyến được tạo ra với các thuộc tính mặc định). Tham số thứ ba là địa chỉ của hàm mà tuyến sẽ dùng để thực thi. Tham số thứ tư là địa chỉ đến vùng dữ liệu sẽ truyền cho hàm thực thi tuyến. 3. Chờ tuyến kết thúc a. Chờ tuyến hoàn thành xong tác vụ Tương tự như tiến trình dùng hàm wait() để đợi tiến trình con kết thúc, bạn có thể gọi hàm pthread_join() để đợi một tuyến kết thúc. #include int pthread_join (pthread_t th, void* thread_return); th là tuyến mà bạn muốn chờ, thread_return là con trỏ đến vùng chưa giá trị trở về của tuyến. b. Chờ đồng thời nhiều tuyến Thường trong các ứng dụng dịch vụ hoạt động theo mô hình khách chủ

TỪ KHÓA LIÊN QUAN