Bài giảng Lập trình đồng thời và phân tán: Bài 2 - Lê Nguyễn Tuấn Thành
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình đồng thời và phân tán: Bài 2 - Lê Nguyễn Tuấn Thành LẬPTRÌNHĐỒNG BÀI 2: BÀI TOÁN LOẠI THỜI TRỪ LẪN NHAU & 1PHÂN TÁN Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn NỘI DUNG1. Bài toán loại trừ lẫn nhau trong những hệ thống chia sẻ bộ nhớ2. Giải pháp cho bài toán loại trừ lẫn nhauBài giảng có sử dụng hình vẽ trong cuốn sách “Concurrent and Distributed Computing in Java, Vijay K. 2Garg, University of Texas, John Wiley & Sons, 2005”Thách thức trong cácchương trình đồng thời▪ Đồng bộ sự thực thi của các luồng khác nhau▪ Cho phép các luồng giao tiếp với nhau thông qua bộ nhớ chia sẻ 3 Phần 1.4 Bài toán loại trừ lẫn nhau Mutual Exclusion Problem - Mutex“Lost update” Problem (1)▪ Nguyên nhân: Race condition▪ Xét tình huống: ▪ Có một biến chia sẻ x với giá trị ban đầu là 0 ▪ Có hai luồng T0 và T1 đều tăng giá trị của x lên 1 ▪ Liệu giá trị của x sau khi thực thi T0 và T1 sẽ là 2? 5 Luồng T0 Luồng T1“Lost update” Đọc giá trị x vào một thanh Problem (2) ghi (giá trị được đọc: 0) Tăng thanh ghi (1) Ghi giá trị trong thanh ghi ngược lại x (x=1) Đọc giá trị x vào một thanh ghi (giá trị được đọc: 1) Tăng thanh ghi (2) Ghi giá trị trong thanh ghi ngược lại x (x=2) 6 Luồng T0 Luồng T1“Lost update” Đọc giá trị x vào một thanh Problem (3) ghi (giá trị được đọc: 0) Tăng thanh ghi (1) Đọc giá trị x vào một thanh ghi (giá trị được đọc: 0) Tăng thanh ghi (1) Ghi giá trị trong thanh ghi ngược lại x (x=1) Ghi giá trị trong thanh ghi ngược lại x (x=1) 7Làm sao để tránhvấn đề mất mát dữ liệu?▪ Câu lệnh x = x +1 phải được thực thi một cách nguyên tử (atomically)▪ Mở rộng ra, nếu một phần mã cần được thi thực một cách nguyên tử thì phần mã đó được gọi là: khu vực quan trọng (Critical Region - CR) hay phần quan trọng (Critical Section - CS)▪ Cho ví dụ về CS ??? 8Bài toán loại trừ lẫnnhau (Mutex)▪ Là bài toán nhằm đảm bảo rằng khu vực quantrọng (CR/CS) của một luồng phải được thựcthi theo một cách nguyên tử▪ Là một trong những bài toán căn bản nhất trongtính toán đồng thời 9Giao diện cho Bài toánMutex▪ Định nghĩa giao diện Lock để đồng bộ việctruy cập khu vực quan trọng (CR/CS) của cácluồng 10 Thread-i Thread-jrequestCS(i) requestCS(j) CSi CSjreleaseCS(i) releaseCS(j) 11 Phần 2.12 Giải pháp cho Bài toán Mutex Busy-waiting solutions within a loopTrường hợp2 luồng 13Thuật toán 1▪ Sử dụng một biến chia sẻ giữa 2 luồng,openDoor kiểu boolean được khởi tạo là true▪ requestCS: luồng đợi cho đến khi biếnopenDoor có giá trị true ▪ Khi giá trị của biến này là true, luồng có thể đi vào CS, sau đó nó đặt lại giá trị của openDoor thành false▪ releaseCS: luồng đặt lại giá trị của biếnopenDoor là true 1415 ▪ Cài đặt này không hoạt động đúng do việc kiểm tra openDoor và việc đặt lại giá trị biến này thành false không được làm một cách nguyên tử ▪ Tưởng tượng rằng một luồng có thể kiểm tra biến openDoor và vượt quaĐánh câu lệnh while ▪ Tuy nhiên, trước khi luồng đó có thểgiá đặt biến openDoor thành false, luồng thứ 2 bắt đầu thực hiệnthuật ▪ Luồng thứ 2 lúc này kiểm tra giá trị của openDoor và cũng vượt qua câutoán 1 lệnh while để đi vào CS ! ▪ Cả hai luồng bây giờ đều có thể đặt openDoor thành false và cùng đi vào CS ▪ Do đó, cài đặt 1 vi phạm sự loại trừ lẫn nhau ! 16Thuật toán 2:Dẫn đến Deadlock▪ Tr ...
Tìm kiếm theo từ khóa liên quan:
Lập trình đồng thời Lập trình phân tán Kỹ thuật lập trình Distributed programming Bài toán loại trừ lẫn nhau Hệ thống chia sẻ bộ nhớGợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 266 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 208 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 195 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 168 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 153 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 118 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 109 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 106 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 93 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 1
246 trang 85 0 0 -
Giáo trình toán rời rạc - Phụ lục 2
15 trang 85 0 0 -
Nghiên cứu triển khai nội địa hóa máy tính thương hiệu Việt Nam
585 trang 83 0 0 -
Giáo trình Lập trình hướng đối tượng với Java: Phần 2 - Trần Thị Minh Châu, Nguyễn Việt Hà
141 trang 75 0 0 -
Cách chia sẻ File, dữ liệu mạng Lan trong Windows Xp
10 trang 61 0 0 -
Giáo trình Ngôn ngữ lập trình C++: Phần 2 - TS. Vũ Việt Vũ
107 trang 58 0 0 -
Luận văn: TÌM HIỂU KỸ THUẬT LẬP TRÌNH NETWORK SERVICE CHO WINDOW
39 trang 55 0 0 -
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 trang 52 0 0 -
Phân tích và thiết kế giải thuật: Các kỹ thuật thiết kế giải thuật - Chương 5
0 trang 51 0 0 -
LUẬN VĂN: Nghiên cứu phương pháp phát hiện thông tin ẩn giấu trong ảnh JPEG 2000
37 trang 48 0 0