tailieunhanh - Bài giảng Lập trình đồng thời và phân tán: Bài 3 - Lê Nguyễn Tuấn Thành
Bài giảng "Lập trình đồng thời và phân tán - Bài 3: Những cơ sở đồng bộ hoá" có cấu trúc gồm 3 phần cung cấp cho người học các kiến thức: Busy-waiting problem, semaphore, monitor. nội dung chi tiết. | Bài giảng Lập trình đồng thời và phân tán: Bài 3 - Lê Nguyễn Tuấn Thành LẬP TRÌNH BÀI 3: ĐỒNG NHỮNG CƠ SỞ THỜI ĐỒNG BỘ HOÁ & 1 PHÂN TÁN Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@ Synchonization primitives 2 NỘI DUNG 1. Busy-waiting problem 2. Semaphore 3. Monitor Bài giảng có sử dụng hình vẽ trong cuốn sách “Concurrent and Distributed Computing in Java, Vijay K. Garg, University of Texas, John Wiley & Sons, 2005” 3 Busy-waiting problem ▪ Những giải pháp ở bài trước gặp một vấn đề chung: bận chờ (busy-wait) khi sử dụng vòng lặp while ▪ Khi một luồng không thể đi vào CS, nó sẽ liên lục kiểm tra điều kiện ở while ▪ Điều này khiến luồng không thể thực hiện các công việc khác => gây lãng phí chu trình CPU ▪ Thay vì phải kiểm tra liên tục điều kiện vào CS, nếu một luồng chỉ kiểm tra khi điều kiện này trở thành true thì sẽ không lãng phí chu trình CPU 4 Synchnization primitives ▪ Những cơ sở đồng bộ hóa giúp giải quyết vấn đề bận chờ ▪ Hai cấu trúc đồng bộ phổ biến: ▪ Semaphore do Dijkstra đề xuất, năm 1968 ▪ Monitor được phát minh bởi P. B. Hansen và C. A. R. Hoare, năm 1972 5 6 Phần 2. Semaphore Semaphores were invented by Edsger Dijkstra, 1968 Source: 7 8 Semaphore nhị phân (1) P(): ▪ Một biến value if (value == false) { kiểu boolean Thêm bản thân luồng Được thực vào hàng đợi và khóa lại; thi nguyên ▪ Một hàng đợi các } tử tiến trình bị khóa value = false; ▪ Hai thao tác V(): nguyên tử: P() và value = true; V() if (hàng đợi không rỗng) { Đánh thức một luồng Được thực bất kỳ trong hàng đợi; thi nguyên } tử 9 10 Semaphore nhị phân (2) Ví dụ cài đặt Phương thức myWait() sẽ khóa luồng hiện tại và chèn nó vào trong hàng đợi các luồng bị khóa 11 Semaphore nhị phân cho Bài toán Mutex 12 Semaphore đếm (1) 13 Semaphore đếm (2) Ví dụ cài
đang nạp các trang xem trước