Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 1
9.0 Dn nhp
9.1 Tng quát vlp trình song song
9.2 Lp trình multi-process bng class Process
9.3 Lp trình multi-thread bng class Thread
9.4 Demo tính hiu quca multi-thread
9.5 Demo vn ₫ề tương tranh gia các thread ₫ồng thi
9.6 Demo vic gii quyết tương tranh gia các thread
9.7 Kết chương
Chương 9
Lp trình song song bng C#
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 2
9.0 Dn nhp
Chương này gii thiu các ₫ối tượng phc v ghi/₫ọc dliu
ra/vào file cùng các tác v ghi/₫ọc dliu c in ra/vào file.
Chương này cũng gii thiu các ₫ối tượng phc v ghi/₫ọc h
thng ₫ối tượng ra/vào file cùng các tác v ghi/₫ọc hthng ₫ối
tượng có mi quan htham kho phc tp ra/vào file.
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 3
9.1 Tng quát vlp trình song song
Thường ₫ể gii quyết bài toán nào ó, ta thường dùng gii thut
tun tnhtính dhiu, dkim soát ca nó. Chương trình dùng
thut gii tun tkhi chy trthành process mono-thread hay
process tun t.
Process tun thot ₫ộng không hiu qu không li dng trit
₫ể ₫ược các CPU xlý trên máy tính vt lý. Lưu ý rng hin nay
các máy PC, smartphone hay tablet ₫ều dùng CPU a nhân. Thí
dgalaxy S4 th trường Vit Nam có 8 nhân.
Để máy gii quyết bài toán hiu qu hơn, ta nên dùng thut toán
song song bng cách nhn dng các hot ₫ộng có ththc hin
₫ồng thi ri nhnhiu CPU thc hin chúng ₫ồng thi.
Mt trong các phương pháp hin thc thut toán song song là lp
trình multi-process và multi-thread.
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 4
9.2 Lp trình multi-process bng class Process
Môi trường .Net cung cp class tên là Process ₫ể giúp ta lp trình
multi-process ddàng.
Class Process thuc namespace System.Diagnostics, nó cha
các thuc tính và tác vgiúp ta qun lý process ddàng, thun
li.
Thí dthuc tính StartInfo là 1 ₫ối tượng gm nhiu thuc tính xác
₫ịnh thông tin ₫ể kích hot ng dng xác ₫ịnh :
Process myProcess = new Process();
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = txtPath.Text;
myProcess.StartInfo.CreateNoWindow = true;
….
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 5
9.2 Lp trình multi-process bng class Process
Sau khi thiết lp ₫ầy ₫ủ các thông tin ₫ể khi to process, ta có
thgi tác v Start ₫ể kích hot nó chy :
myProcess.Start();
Sau khi ₫ược kích hot, process schy song hành và ₫ộc lp vi
process kích hot nó cho ₫ến khi kết thúc theo thut gii ca nó.
Tuy nhiên, tbên ngoài ta có thgiết process nhtác vKill :
myProcess.Kill();
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 6
9.2 Lp trình multi-process bng class Process
Ta hãy thviết 1 ng dng qun lý process ₫ơn gin có form giao
din như sau :
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 7
9.3 Lp trình multi-threads bng class Thread
Môi trường .Net cung cp class tên là Thread ₫ể giúp ta lp trình
multi-thread ddàng.
Class Thread thuc namespace System.Threading, nó cha các
thuc tính và tác vgiúp ta qun lý thread ddàng, thun li.
Thường mi thread schy on code ₫ược miêu ttrong 1 hàm
chc năng xác ₫ịnh. Thí d khi process ₫ược kích hot, HĐH s
to tường minh thread ban ₫ấu cho process ó, thread chính này
schy on code ca hàm Main ca class ng dng.
Để to thread mi, ta có thdùng lnh :
Thread t = new Thread
(new ParameterizedThreadStart(tenhamcanchay));
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 8
9.3 Lp trình multi-threads bng class Thread
Để kích hot chy thread, ta có thgi tác vStart :
t.Start (new Params(danhsachthamso));
vi Params là class ₫ối tượng cha các thông s ta mun
truyn/nhn cho thread mi.
Lưu ý tác v thread schy phi ₫ược ₫ặc tvi tham shình
thc là kiu object :
void TinhTich (object obj) { //tác v thread schy
Params p = (Params)obj; //ép kiu tham svkiu mong mun
...
}
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 9
9.3 Lp trình multi-threads bng class Thread
Để tm dng thread, ta có thgi tác vSuspend :
t.Suspend();
Để chy tiếp thread, ta có thgi tác vResume :
t.Resume();
Để dng và xóa thread, ta có thgi tác vAbort :
t.Abort();
Để thay ₫ổi quyn ưu tiên thread, ta thc hin lnh gán :
t.Priority = ThreadPriority.Normal;
Khoa Khoa hc & Kthut Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lp trình hướng ₫ối tượng
Chương 9 : Lp trình song song bng VC#
Slide 10
9.3 Lp trình multi-threads bng class Thread
Trên Windows, mi process có thểở1 trong 6 cp quyn ư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
Cp quyn ưu tiên ca process squyết ₫ịnh các thread trong
process óchy theo quyn ưu tiên như thếnào.