Bài giảng môn học Lập trình hệ nhúng - Chương 4: Các kĩ thuật lập trình nâng cao - Phạm Văn Thuận

Khai báo thư viện: pthread.h § Hàm tạo luồng: pthread_create v thread: thread id Lập trình hệ nhúng 83 v attr: các thuộc tính của luồng, mặc định để NULL v start_routine: hàm thực thi trong luồng v arg: các tham số truyền cho luồng § Biên dịch chương trình: gcc –o multithread multithread.c -pthread

pdf19 trang | Chia sẻ: huongthu9 | Lượt xem: 577 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bài giảng môn học Lập trình hệ nhúng - Chương 4: Các kĩ thuật lập trình nâng cao - Phạm Văn Thuận, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương 4. Các kỹ thuật lập trình nâng cao 4.1. Tiến trình (process) và cơ chế sử dụng signal 4.2. Lập trình xử lý đa tiến trình 4.3. Giới thiệu về luồng 4.4. Lập trình đa luồng Lập trình hệ nhúng 70 4.1. Tiến trình và cơ chế sử dụng signal § Khái niệm tiến trình § Cơ chế sử dụng signal Lập trình hệ nhúng 71 Khái niệm tiến trình § Tiến trình được tạo ra khi ta thực thi một chương trình § Đa tiến trình cho phép nhiều chương trình cùng thực thi và chia sẻ dữ liệu với nhau § Các tham số của một tiến trình Lập trình hệ nhúng • PID (Process ID): số hiệu tiến trình • PPID (Parent Process ID): số hiệu tiến trình cha • Command: câu lệnh được gọi để thực thi tiến trình ls –e –o pid,ppid,command 72 PID, PPID §Lấy về PID: sử dụng hàm getpid() §Lấy về PPID: sử dụng hàm getppid() §Hàm getpid() và getppid() trả giá trị kiểu pid_t (bản chất là kiểu int) Lập trình hệ nhúng 73 Dừng tiến trình § Cách 1: Sử dụng tổ hợp phím Ctrl + C § Cách 2: Sử dụng shell command kill PID Lập trình hệ nhúng 74 Tạo tiến trình mới § Cách 1: sử dụng hàm system Lập trình hệ nhúng 75 Tạo tiến trình mới § Cách 2: sử dụng hàm fork và exec Lập trình hệ nhúng 76 Cơ chế sử dụng signal § Signal là cơ chế cho phép giao tiếp giữa các tiến trình § Signal là cơ chế không đồng bộ § Khi tiến trình nhận được signal, tiến trình phải xử lý signal ngay lập tức Lập trình hệ nhúng § Linux hỗ trợ 32 SIGNAL 77 Danh sách signal thường dùng Kiểu SIGNAL Lý do gửi SIGNAL SIGHUP Báo cho chương trình khi thoát khỏi terminal SIGINT Khi người dùng nhấn Ctrl + C để tắt chương trình SIGILL Khi chương trình chạy lệnh không hợp lệ Lập trình hệ nhúng SIGABRT Khi chương trình nhận được lệnh abort SIGKILL Khi chương trình nhận được lệnh kill (đóng chương trình) SIGUSR1 Tùy biến theo ứng dụng SIGUSR2 Tùy biến theo chương trình 78 Gửi SIGNAL tới process § Cách 1: sử dụng shell command kill [-SIGNAL_TYPE] PID § Cách 2: sử dụng hàm kill trong chương trình, cho phép process này gửi signal tới process khác Lập trình hệ nhúng kill(PID, SIGNAL_TYPE) 79 4.2. Lập trình giao tiếp đa tiến trình § Cơ chế: • Tiến trình chính tạo ra các tiến trình con sử dụng lệnh fork và exec • Sử dụng cơ chế signal để trao đổi tín hiệu giữa các tiến trình Lập trình hệ nhúng 80 4.3. Giới thiệu về luồng (thread) § Một chương trình mặc định chạy một luồng -> luồng chính § Luồng chính có thể tạo ra các luồng khác, các luồng sẽ chạy đồng thời -> tăng tốc chương trình § Các luồng chia sẻ không gian nhớ, truy xuất file Lập trình hệ nhúng và các tài nguyên khác § Tham số của một luồng: • thread ID: số hiệu luồng (kiểu dữ liệu pthread_t) 81 4.4. Lập trình xử lý đa luồng § Tạo luồng § Truyền tham số cho luồng § Nhận giá trị trả về từ luồng § Tắt luồng Lập trình hệ nhúng 82 Tạo luồng § Khai báo thư viện: pthread.h § Hàm tạo luồng: pthread_create v thread: thread id Lập trình hệ nhúng 83 v attr: các thuộc tính của luồng, mặc định để NULL v start_routine: hàm thực thi trong luồng v arg: các tham số truyền cho luồng § Biên dịch chương trình: gcc –o multithread multithread.c -pthread Mã nguồn tạo luồng Lập trình hệ nhúng 84 Truyền tham số cho luồng § Khai báo cấu trúc dữ liệu chứa dữ liệu cần truyền cho luồng. Ví dụ: struct arg { //Ky tu can in char character; Lập trình hệ nhúng //So lan can in int count; }; § Truyền dữ liệu cho luồng khi tạo luồng qua tham số arg § Chương trình con thực thi luồng nhận tham số về và xử lý 85 Mã nguồn truyền tham số cho luồng Lập trình hệ nhúng 86 Tắt luồng § Sử dụng hàm pthread_cancel: § thread: nhận tham số thread id của luồng muốn tắt Lập trình hệ nhúng 87 Mã nguồn tắt luồng Lập trình hệ nhúng 88

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_mon_hoc_lap_trinh_he_nhung_chuong_4_cac_ki_thuat_l.pdf