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ượt xem 2
download
Bài giảng "Lập trình đồng thời và phân tán - Bài 2: Bài toán loại trừ lẫn nhau" cung cấp cho người học các kiến thức: Bài toán loại trừ lẫn nhau trong những hệ thống chia sẻ bộ nhớ, giải pháp cho bài toán loại trừ lẫn nhau. Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: 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ẬP TRÌNH ĐỒNG BÀI 2: BÀI TOÁN LOẠI THỜI TRỪ LẪN NHAU & 1 PHÂN TÁN Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn
- NỘI DUNG 1. 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 nhau Bài giảng có sử dụng hình vẽ trong cuốn sách “Concurrent and Distributed Computing in Java, Vijay K. 2 Garg, University of Texas, John Wiley & Sons, 2005”
- Thách thức trong các chươ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) 7
- Làm sao để tránh vấ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 ??? 8
- Bài toán loại trừ lẫn nhau (Mutex) ▪ Là bài toán nhằm đảm bảo rằng khu vực quan trọng (CR/CS) của một luồng phải được thực thi theo một cách nguyên tử ▪ Là một trong những bài toán căn bản nhất trong tính toán đồng thời 9
- Giao diện cho Bài toán Mutex ▪ Định nghĩa giao diện Lock để đồng bộ việc truy cập khu vực quan trọng (CR/CS) của các luồng 10
- Thread-i Thread-j requestCS(i) requestCS(j) CSi CSj releaseCS(i) releaseCS(j) 11
- Phần 2. 12 Giải pháp cho Bài toán Mutex Busy-waiting solutions within a loop
- Trường hợp 2 luồng 13
- Thuậ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ến openDoor 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ến openDoor là true 14
- 15
- ▪ 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ện thuật ▪ Luồng thứ 2 lúc này kiểm tra giá trị của openDoor và cũng vượt qua câu toá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 ! 16
- Thuật toán 2: Dẫn đến Deadlock ▪ Trong cài đặt 1, biến chia sẻ openDoor không lưu lại luồng nào đã cập nhật nó thành false ▪ Cài đặt 2 giải quyết vấn đề này bằng cách sử dụng 2 biến chia sẻ wantCS [0] và wantCS[1] 17
- 18
- ▪ Cài đặt này cũng không làm việc đúng! Đánh ▪ Cả hai luồng có thể CÙNG giá LÚC đặt bit wantCS của nó thành true và rơi vào thuật vòng lặp đợi vô hạn do đều chờ luồng kia đặt bit toán 2 wantCS thành false! ▪ DEADLOCK ! 19
- Deadlock ▪ Thread 1: locks resource A, waits for resource B ▪ Thread 2: locks resource B, waits for resource A 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng môn lập trình Windows 3 (C#) - Trương Bá Thái
140 p | 606 | 221
-
Lập trình web - Chương 6 PHP và CSDL
47 p | 300 | 24
-
Lập trình web - Chương 7 Truyền nhận dữ liệu qua môi trường web
32 p | 322 | 24
-
Bài giảng Lập trình Java - ThS. Huỳnh Công Pháp
239 p | 165 | 21
-
Bài giảng Lập trình mạng: Chương 5 - ThS. Trần Bá Nhiệm
66 p | 70 | 8
-
Bài giảng Lập trình mạng: Chương 11 - ThS. Trần Bá Nhiệm
43 p | 75 | 7
-
Bài giảng Lập trình mạng: Máy chủ xử lý đồng thời, đa luồng - TS. Nguyễn Hoài Sơn
38 p | 75 | 5
-
Bài giảng Lập trình mạng: Lập trình máy chủ - TS. Nguyễn Hoài Sơn
57 p | 75 | 5
-
Bài giảng môn Lập trình hướng đối tượng: Chương 9 - TS. Nguyễn Văn Hiệp
28 p | 38 | 3
-
Bài giảng Lập trình đồng thời và phân tán: Bài 5 - Lê Nguyễn Tuấn Thành
47 p | 68 | 3
-
Bài giảng Lập trình đồng thời và phân tán: Bài 7 - Lê Nguyễn Tuấn Thành
35 p | 42 | 2
-
Bài giảng Lập trình đồng thời và phân tán: Bài 6 - Lê Nguyễn Tuấn Thành
25 p | 25 | 2
-
Bài giảng Lập trình đồng thời và phân tán: Bài 4 - Lê Nguyễn Tuấn Thành
40 p | 28 | 2
-
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
49 p | 26 | 2
-
Bài giảng Lập trình đồng thời và phân tán: Bài 1 - Lê Nguyễn Tuấn Thành
28 p | 55 | 2
-
Bài giảng Lập trình đồng thời và phân tán: Tổng quan môn học - Lê Nguyễn Tuấn Thành
11 p | 50 | 2
-
Bài giảng Lập trình đồng thời và phân tán: Bài 8 - Lê Nguyễn Tuấn Thành
18 p | 47 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn