Thực hành Hệ điều hành - Bài thực hành số 5.2: Viết phần mềm giải quyết deadlock

Giúp SV củng cố kiến thức về deadlock và hiện trạng giải quyết deadlock trên
Windows.
ƒ Giúp SV làm quen với việc dùng class Mutex của namespace System.Threadings, sự
hiện thực semaphore nhị phân của môi trường .NET, ₫ể loại trừ tương hỗ giữa các
thread khi chúng cùng truy xuất vào tài nguyên dùng chung.
ƒ Giúp SV biết cách dùng tác vụ WaitOne() của class Mutex ₫ể giải quyết deadlock
(dùng chiến lược giết 1 hay nhiều thread tham gia deadlock) 
pdf 3 trang xuanthi 30/12/2022 860
Bạn đang xem tài liệu "Thực hành Hệ điều hành - Bài thực hành số 5.2: Viết phần mềm giải quyết deadlock", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfthuc_hanh_he_dieu_hanh_bai_thuc_hanh_so_5_2_viet_phan_mem_gi.pdf

Nội dung text: Thực hành Hệ điều hành - Bài thực hành số 5.2: Viết phần mềm giải quyết deadlock

  1. Trang 2 int yR, yG, yB; if (c.R > 128) yR = 0; else yR = 255; if (c.G > 128) yG = 0; else yG = 255; if (c.B > 128) yB = 0; else yB = 255; Pen pen = new Pen(Color.FromArgb(yR, yG, yB), 2); if (p.tx >= 0 && p.ty >= 0) { //hiện mũi tên góc dưới phải x = xCell * x1 + xCell - 2; y = yCell * y1 + yCell - 2; g.DrawLine(pen, x, y, x - 10, y); g.DrawLine(pen, x, y, x, y-10); } else if (p.tx >= 0 && p.ty = 0) { //hiện mũi tên góc dưới trái x = xCell * x1 + 2; y = yCell * y1 + yCell - 2; g.DrawLine(pen, x, y, x + 10, y); g.DrawLine(pen, x, y, x, y - 10); } else {//hiện mũi tên góc trên trái x = xCell * x1 + 2; y = yCell * y1 + 2; g.DrawLine(pen, x, y, x + 10, y); g.DrawLine(pen, x, y, x, y + 10); } //giả lập thực hiện công việc của thread tốn 500ms MySleep(500); //xác ₫ịnh vị trí mới của thread p.HieuchinhVitri(); x2 = p.Pos.X; y2 = p.Pos.Y; //xin khóa truy xuất cell (x2,y2) while (true) { kq = mutList[y2, x2].WaitOne(new TimeSpan(0,0,2)); if (kq==true || p.start==false) break; } // Xóa vị trí cũ g.FillRectangle(brush, xCell * x1, yCell * y1, xCell, yCell); //trả cell (x1,y1) cho các thread khác truy xuất mutList[y1, x1].ReleaseMutex(); } } catch (Exception e) { p.stop = true; p.t.Abort(); } //dọn dẹp thread trước khi ngừng x1 = p.Pos.X; y1 = p.Pos.Y; g.FillRectangle(brush, xCell * x1, yCell * y1, xCell, yCell); //trả cell (x1,y1) cho các thread khác truy xuất mutList[y1, x1].ReleaseMutex(); // dừng Thread p.stop = true;