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
19 trang |
Chia sẻ: huongthu9 | Lượt xem: 674 | Lượt tải: 0
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:
- bai_giang_mon_hoc_lap_trinh_he_nhung_chuong_4_cac_ki_thuat_l.pdf