
Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 1
9.0 Dẫn nhập
9.1 Tổng quát vềlập trình song song
9.2 Lập trình multi-process bằng class Process
9.3 Lập trình multi-thread bằng class Thread
9.4 Demo tính hiệu quảcủa multi-thread
9.5 Demo vấn ₫ề tương tranh giữa các thread ₫ồng thời
9.6 Demo việc giải quyết tương tranh giữa các thread
9.7 Kết chương
Chương 9
Lập trình song song bằng C#
Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 2
9.0 Dẫn nhập
Chương này giới thiệu các ₫ối tượng phục vụ ghi/₫ọc dữliệu
ra/vào file cùng các tác vụ ghi/₫ọc dữliệu cổ ₫iển ra/vào file.
Chương này cũng giới thiệu các ₫ối tượng phục vụ ghi/₫ọc hệ
thống ₫ối tượng ra/vào file cùng các tác vụ ghi/₫ọc hệthống ₫ối
tượng có mối quan hệtham khảo phức tạp ra/vào file.

Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 3
9.1 Tổng quát vềlập trình song song
Thường ₫ể giải quyết bài toán nào ₫ó, ta thường dùng giải thuật
tuần tựnhờtính dễhiểu, dễkiểm soát của nó. Chương trình dùng
thuật giải tuần tựkhi chạy trởthành process mono-thread hay
process tuần tự.
Process tuần tựhoạt ₫ộng không hiệu quảvì không lợi dụng triệt
₫ể ₫ược các CPU xửlý trên máy tính vật lý. Lưu ý rằng hiện nay
các máy PC, smartphone hay tablet ₫ều dùng CPU ₫a nhân. Thí
dụgalaxy S4 ởthị trường Việt Nam có 8 nhân.
Để máy giải quyết bài toán hiệu quả hơn, ta nên dùng thuật toán
song song bằng cách nhận dạng các hoạt ₫ộng có thểthực hiện
₫ồng thời rồi nhờnhiều CPU thực hiện chúng ₫ồng thời.
Một trong các phương pháp hiện thực thuật toán song song là lập
trình multi-process và multi-thread.
Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 4
9.2 Lập trình multi-process bằng class Process
Môi trường .Net cung cấp class tên là Process ₫ể giúp ta lập trình
multi-process dễdàng.
Class Process thuộc namespace System.Diagnostics, nó chứa
các thuộc tính và tác vụgiúp ta quản lý process dễdàng, thuận
lợi.
Thí dụthuộc tính StartInfo là 1 ₫ối tượng gồm nhiều thuộc tính xác
₫ịnh thông tin ₫ể kích hoạt ứng dụng xác ₫ịnh :
Process myProcess = new Process();
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = txtPath.Text;
myProcess.StartInfo.CreateNoWindow = true;
….

Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 5
9.2 Lập trình multi-process bằng class Process
Sau khi thiết lập ₫ầy ₫ủ các thông tin ₫ể khởi tạo process, ta có
thểgọi tác vụ Start ₫ể kích hoạt nó chạy :
myProcess.Start();
Sau khi ₫ược kích hoạt, process sẽchạy song hành và ₫ộc lập với
process kích hoạt nó cho ₫ến khi kết thúc theo thuật giải của nó.
Tuy nhiên, từbên ngoài ta có thểgiết process nhờtác vụKill :
myProcess.Kill();
Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 6
9.2 Lập trình multi-process bằng class Process
Ta hãy thửviết 1 ứng dụng quản lý process ₫ơn giản có form giao
diện như sau :

Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 7
9.3 Lập trình multi-threads bằng class Thread
Môi trường .Net cung cấp class tên là Thread ₫ể giúp ta lập trình
multi-thread dễdàng.
Class Thread thuộc namespace System.Threading, nó chứa các
thuộc tính và tác vụgiúp ta quản lý thread dễdàng, thuận lợi.
Thường mỗi thread sẽchạy ₫oạn code ₫ược miêu tảtrong 1 hàm
chức năng xác ₫ịnh. Thí dụ khi process ₫ược kích hoạt, HĐH sẽ
tạo tường minh thread ban ₫ấu cho process ₫ó, thread chính này
sẽchạy ₫oạn code của hàm Main của class ứng dụng.
Để tạo thread mới, ta có thểdùng lệnh :
Thread t = new Thread
(new ParameterizedThreadStart(tenhamcanchay));
Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 8
9.3 Lập trình multi-threads bằng class Thread
Để kích hoạt chạy thread, ta có thểgọi tác vụStart :
t.Start (new Params(danhsachthamso));
với Params là class ₫ối tượng chứa các thông sốmà ta muốn
truyền/nhận cho thread mới.
Lưu ý tác vụmà thread sẽchạy phải ₫ược ₫ặc tảvới tham sốhình
thức là kiểu object :
void TinhTich (object obj) { //tác vụmà thread sẽchạy
Params p = (Params)obj; //ép kiểu tham sốvềkiểu mong muốn
...
}

Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 9
9.3 Lập trình multi-threads bằng class Thread
Để tạm dừng thread, ta có thểgọi tác vụSuspend :
t.Suspend();
Để chạy tiếp thread, ta có thểgọi tác vụResume :
t.Resume();
Để dừng và xóa thread, ta có thểgọi tác vụAbort :
t.Abort();
Để thay ₫ổi quyền ưu tiên thread, ta thực hiện lệnh gán :
t.Priority = ThreadPriority.Normal;
Khoa Khoa học & Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 9 : Lập trình song song bằng VC#
Slide 10
9.3 Lập trình multi-threads bằng class Thread
Trên Windows, mỗi process có thểở1 trong 6 cấp quyền ưu tiên
sau ₫ây :
IDLE_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS
Cấp quyền ưu tiên của process sẽquyết ₫ịnh các thread trong
process ₫óchạy theo quyền ưu tiên như thếnào.