Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
1,25 MB
Nội dung
Lập trình IPC thread Bộ mơn Hệ thống Mạng máy tính Khoa Khoa học kỹ thuật máy tính Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Lập trình Linux Lập trình IPC Dùng pipe Dùng semaphore Lập trình thread Cơ lập trình POSIX pthread Giải tranh chấp POSIX thread Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Lập trình Linux Lập trình IPC Dùng pipe Dùng semaphore Lập trình thread Cơ lập trình POSIX pthread Giải tranh chấp POSIX thread Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Giới thiệu IPC Mục tiêu IPC IPC: Inter-Process Communication Cho phép phối hợp hoạt động trình hệ thống Giải đụng độ vùng tranh chấp Truyền thông điệp từ trình đến trình khác Chia sẻ thơng tin q trình với Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Giao tiếp đồng Communication Truyền liệu Chia sẻ thông tin Các chế: Pipe Signal Message queue Shared memory Socket RPC/RMI Synchronization Giải tranh chấp Đảm bảo thứ tự xử lý Các chế: Lock file Semaphore Mutex (pthread) Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Lập trình Linux Lập trình IPC Dùng pipe Dùng semaphore Lập trình thread pthread Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Giao tiếp thông qua PIPE Là kênh truyền liệu process với theo dạng FIFO Writer Reader P1 P2 Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Các tác vụ pipe Write: #include ssize_t write(int fd, const void *buf, size_t count) Read: #include ssize_t read(int fd, const void *buf, size_t count) Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Hai loại pipe Unnamed pipe có ý nghĩa cục dành cho process có quan hệ bố với Named pipe (cịn gọi FIFO) có ý nghĩa tồn cục sử dụng cho process không liên quan bố Khoa KH&KTMT - Đại học Bách Khoa Tp HCM Unnamed pipe Tạo unnamed pipe: #include int pipe(int filedes[2]); Kết Thành công, kết thực thi hàm pipe() 0, có hai file descriptor tương ứng trả filedes[0], filedes[1] Thất bại: hàm pipe() trả -1, mã lỗi biến ngoại errno Khoa KH&KTMT - Đại học Bách Khoa Tp HCM 10 Lập trình POSIX thread Lưu ý tham số thứ start_routine nên có kiểu trả trỏ kiểu void, khơng phải có type casting gọi pthread_create() nên có tham số kiểu trỏ void Tham số hàm start_routine truyền vào thông qua tham số thứ hàm pthread_create() Lưu ý tham số thứ arg tham số truyền vào cho hàm start_routine cần truyền nhiều tham số nên định nghĩa arg kiểu cấu trúc struct Khoa KH&KTMT - Đại học Bách Khoa Tp HCM 46 Lập trình POSIX thread Thread kết thúc thực thi hàm start_routine kết thúc có lời gọi hàm pthread_exit() tường minh thread bị ngắt lời gọi hàm pthread_cancel() process kết thúc thread gọi system call exec() Lời gọi hàm kết thúc thread tường minh void pthread_exit(void * retval); Khoa KH&KTMT - Đại học Bách Khoa Tp HCM 47 Ví dụ #include #include void* func(void* arg) { int i; for (i = 0; i < 2; i++) { printf ("This is thread %d\n", *((int*)arg)); sleep (1); } } Khoa KH&KTMT - Đại học Bách Khoa Tp HCM 48 Ví dụ (tt) int main (int argc, char **argv) { int i; pthread_t tid[3]; for (i=0; i