Thực hành Hệ điều hành - Bài thực hành số 5.1: Viết phần mềm giải quyết tương tranh giữa các thread

Giúp SV củng cố kiến thức về phương pháp dùng semaphore nhị phân ₫ể giải quyết
loại trừ tương hỗ giữa các thread khi chúng ₫ồng thời truy xuất tài nguyên dùng
chung.
ƒ 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. 
pdf 8 trang xuanthi 30/12/2022 760
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.1: Viết phần mềm giải quyết tương tranh giữa các thread", để 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_1_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.1: Viết phần mềm giải quyết tương tranh giữa các thread

  1. Trang 2 for (cot = 0; cot 0x5a) return; //xác ₫ịnh chức năng mà user muốn và thực hiện if (e.Control && e.Shift) { //kill thread // dừng Thread threadLst[newch - 65].start = false; } else if (e.Control && e.Alt) { //tạm dừng thread if (threadLst[newch - 65].start && !threadLst[newch - 65].suspend) { threadLst[newch - 65].t.Suspend(); threadLst[newch - 65].suspend = true; } } else if (e.Alt) { //cho thread chạy lại if (threadLst[newch - 65].start && threadLst[newch - 65].suspend) { threadLst[newch - 65].t.Resume(); threadLst[newch - 65].suspend = false; } } else if (e.Shift)
  2. Trang 4 { long i, j, k = 0; for (i = 0; i 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);
  3. Trang 6 //hàm khởi tạo các thông số của thread public MyThread(Random rnd, int xMax, int yMax) { Xmax = xMax; Ymax = yMax; Pos.X = (int)(rnd.Next(0, Xmax)); Pos.Y = (int)(rnd.Next(0, Ymax)); dblGocChay = ChinhGocChay(rnd.Next(0, 360)); } //=== //Hiệu chỉnh góc chạy của thread //₫ể tránh các trường hợp thread chạy thẳng ₫ứng hay ngang //=== double ChinhGocChay(double dblGocChay) { double goc = dblGocChay; if (0 0 && dblGocChay thay ₫ổi góc chạy
  4. Trang 8 12. Ấn phải chuột vào folder Resources, chọn option Existing Items, duyệt chọn 26 file bitmap miêu tả 26 icon A-Z ₫ể add chúng vào folder Resources. 12. Chọn 26 mục vừa add vào folder Resources ₫ể hiển thị cửa sổ thuộc tính chúng của chúng, hiệu chỉnh lại thuộc tính Build Action về giá trị mới là "Embedded Resource". 13. Chọn menu Debug.Start Debugging ₫ể dịch và chạy thử ứng dụng. 14. Khi Form chương trình hiển thị, hãy thực hiện gỏ phím qui ₫ịnh như sau ₫ể quản lý các thread : ƒ Ấn phím từ A-Z ₫ể kích hoạt chạy thread có tên tương ứng. ƒ Ấn phím Ctrl-Alt-X ₫ể tạm dừng chạy thread X. ƒ Ấn phím Alt-X ₫ể chạy tiếp thread X. ƒ Ấn phím Shift-X ₫ể tăng ₫ộ ưu tiên chạy cho thread X. ƒ Ấn phím Ctrl-X ₫ể giảm ₫ộ ưu tiên chạy cho thread X. ƒ Ấn phím Ctrl-Shift-X ₫ể dừng và thoát thread X. Khi số thread chạy tương ₫ối nhiều, hãy quan sát hiện tượng icon của thread này tiến ₫ến và ₫è icon của thread khác không còn nữa, bây giờ thread A phải chờ thread B nếu A muốn hiển thỉ cell mà B ₫ang hiển thị. Hiện tượng dừng chờ này có thể gây ra deadlock, nghĩa là các thread có thể dừng chờ lẫn nhau và không có thread nào chạy tiếp ₫ược. Tóm lại deadlock là hậu quả của việc xử lý tương tranh giữa các thread. Hiện này Windows và các HĐH phổ biến khác ₫ều không xử lý deadlock tự ₫ộng, do ₫ó chương trình ứng dụng và/hoặc người dùng phải tự giải quyết lấy.