Bài giảng Lập trình hệ nhúng - Chương 4 Kỹ thuật lập trình nâng cao

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; //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ý

pdf26 trang | Chia sẻ: truongthinh92 | Lượt xem: 1716 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hệ nhúng - Chương 4 Kỹ thuật lập trình nâng cao, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình nhúng ARM-Linux Chương 4 Kỹ thuật lập trình nâng cao 124 Lập trình nhúng ARM-Linux Mục tiêu chương 4  Sau khi kết thúc chương n{y, sinh viên có thể • Nắm được kh|i niệm tiến trình (process), quan hệ giữa c|c tiến trình • Trình b{y được cơ chế sử dụng signal để giao tiếp giữa c|c tiến trình • Lập trình sử dụng kỹ thuật đa tiến trình • Trình b{y kh|i niệm luồng • Lập trình ứng dụng đa luồng 125 Lập trình nhúng ARM-Linux Nội dung 4.1. Tiến trình (process) 4.2. Cơ chế sử dụng signal 4.3. Lập trình giao tiếp đa tiến trình 4.4. Luồng (thread) 4.5. Lập trình ứng dụng đa luồng 126 Lập trình nhúng ARM-Linux 4.1. Tiến trình (Process)  Kh|i niệm tiến trình  Lập trình đa tiến trình 127 Lập trình nhúng ARM-Linux 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 • 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 128 Lập trình nhúng ARM-Linux 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) 129 Lập trình nhúng ARM-Linux 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 130 Lập trình nhúng ARM-Linux Tạo tiến trình mới  Cách 1: sử dụng h{m system 131 Lập trình nhúng ARM-Linux Tạo tiến trình mới  Cách 2: sử dụng h{m fork v{ exec 132 Lập trình nhúng ARM-Linux 4.2. 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  Linux hỗ trợ 32 SIGNAL 133 Lập trình nhúng ARM-Linux 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ệ 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 134 Lập trình nhúng ARM-Linux 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 kill(PID, SIGNAL_TYPE) 135 Lập trình nhúng ARM-Linux 4.3. 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 136 Lập trình nhúng ARM-Linux Ví dụ  Bắt v{ xử lý signal được gửi tới một tiến trình (SIGTERM và SIGINT) 137 Lập trình nhúng ARM-Linux killsignal.c 138 Lập trình nhúng ARM-Linux Ví dụ: killsignal.c (tiếp) 139 Lập trình nhúng ARM-Linux Demo 140 Lập trình nhúng ARM-Linux 4.4. 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 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) 141 Lập trình nhúng ARM-Linux 4.5. 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 142 Lập trình nhúng ARM-Linux Tạo luồng  Khai b|o thư viện: pthread.h  H{m tạo luồng: pthread_create  thread: thread id  attr: các thuộc tính của luồng, mặc định để NULL  start_routine: hàm thực thi trong luồng  arg: các tham số truyền cho luồng  Biên dịch chương trình: gcc –o multithread multithread.c -pthread 143 Lập trình nhúng ARM-Linux Mã nguồn tạo luồng 144 Lập trình nhúng ARM-Linux 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; //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ý 145 Lập trình nhúng ARM-Linux Mã nguồn truyền tham số cho luồng 146 Lập trình nhúng ARM-Linux 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 147 Lập trình nhúng ARM-Linux Mã nguồn tắt luồng 148 Lập trình nhúng ARM-Linux Thảo luận 149

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

  • pdflap_trinh_he_nhung_esprogramming_c4_4023.pdf
Tài liệu liên quan