Bài giảng Lập trình hướng đối tượng - Chương 9: Lập trình song song bằng C#

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

pdf 28 trang phuongnguyen 4320
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 9: Lập trình song song bằng C#", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình hướng đối tượng - Chương 9: Lập trình song song bằng C#

Bài giảng Lập trình hướng đối tượng - Chương 9: Lập trình song song bằng C#
 Chương 9
 Lập trình song song bằng C#
 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
Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
© 2010 Slide 1
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 2
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 3
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 4
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 5
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 6
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 7
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 8
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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 9
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.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 10
9.3 Lập trình multi-threads bằng class Thread
 Trên Windows, mỗi thread trong process có thể ở 1 trong 7 cấp
 quyềnưutiênsau₫ây:
 THREAD_PRIORITY_IDLE
 THREAD_PRIORITY_LOWEST
 THREAD_PRIORITY_BELOW_NORMAL
 THREAD_PRIORITY_NORMAL
 THREAD_PRIORITY_ABOVE_NORMAL
 THREAD_PRIORITY_HIGHEST
 THREAD_PRIORITY_TIME_CRITICAL
 Cấp quyền ưu tiên của process sẽ quyết ₫ịnh các thread với từng
 cấp quyền ưu tiên trên ₫ây sẽ ₫ược xử lý như thế nào.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 11
9.3 Lập trình multi-threads bằng class Thread
 Process priority class Thread priority level Base priority
 IDLE_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1
 THREAD_PRIORITY_LOWEST 2
 THREAD_PRIORITY_BELOW_NORMAL 3
 THREAD_PRIORITY_NORMAL 4
 THREAD_PRIORITY_ABOVE_NORMAL 5
 THREAD_PRIORITY_HIGHEST 6
 THREAD_PRIORITY_TIME_CRITICAL 15
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 12
9.3 Lập trình multi-threads bằng class Thread
 Process priority class Thread priority level Base priority
 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1
 THREAD_PRIORITY_LOWEST 4
 THREAD_PRIORITY_BELOW_NORMAL 5
 THREAD_PRIORITY_NORMAL 6
 THREAD_PRIORITY_ABOVE_NORMAL 7
 THREAD_PRIORITY_HIGHEST 8
 THREAD_PRIORITY_TIME_CRITICAL 15
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 13
9.3 Lập trình multi-threads bằng class Thread
 Process priority class Thread priority level Base priority
 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1
 THREAD_PRIORITY_LOWEST 6
 THREAD_PRIORITY_BELOW_NORMAL 7
 THREAD_PRIORITY_NORMAL 8
 THREAD_PRIORITY_ABOVE_NORMAL 9
 THREAD_PRIORITY_HIGHEST 10
 THREAD_PRIORITY_TIME_CRITICAL 15
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 14
9.3 Lập trình multi-threads bằng class Thread
 Process priority class Thread priority level Base priority
 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1
 THREAD_PRIORITY_LOWEST 8
 THREAD_PRIORITY_BELOW_NORMAL 9
 THREAD_PRIORITY_NORMAL 10
 THREAD_PRIORITY_ABOVE_NORMAL 11
 THREAD_PRIORITY_HIGHEST 12
 THREAD_PRIORITY_TIME_CRITICAL 15
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 15
9.3 Lập trình multi-threads bằng class Thread
 Process priority class Thread priority level Base priority
 HIGH_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1
 THREAD_PRIORITY_LOWEST 11
 THREAD_PRIORITY_BELOW_NORMAL 12
 THREAD_PRIORITY_NORMAL 13
 THREAD_PRIORITY_ABOVE_NORMAL 14
 THREAD_PRIORITY_HIGHEST 15
 THREAD_PRIORITY_TIME_CRITICAL 15
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 16
9.3 Lập trình multi-threads bằng class Thread
 Process priority class Thread priority level Base priority
 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_IDLE 16
 THREAD_PRIORITY_LOWEST 22
 THREAD_PRIORITY_BELOW_NORMAL 23
 THREAD_PRIORITY_NORMAL 24
 THREAD_PRIORITY_ABOVE_NORMAL 25
 THREAD_PRIORITY_HIGHEST 26
 THREAD_PRIORITY_TIME_CRITICAL 31
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 17
9.4 Demo tính hiệu quả của multi-thread
 Để demo tính hiệu quả của lập trình multi-thread trên các máy tính
 ₫anhân,tahãythửviếtứngdụngtínhtíchcủa2matrậncókích
 thước lớn (thí dụ 2000*2000). Ta thiết kế form ứng dụng như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 18
9.4 Demo tính hiệu quả của multi-thread
 Ứng dụng cho phép người dùng nhập số thread cần dùng (n), rồi
 chia ma trận tích thành N/n nhóm hàng rồi tạo thread con ₫ể tính
 dùm từng nhóm hàng. Sau khi tính ma trận tích xong, ứng dụng sẽ
 hiển thị cho người dùng thấy thời gian tính toán ₫ể người dùng
 ₫ánh giá ₫ộ hiệu quả.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 19
9.4 Demo tính hiệu quả của multi-thread
void TinhTich (object obj) {
 DateTime t1 = DateTime.Now; //ghi nhận thời ₫iểm bắt ₫ầu chạy
 Params p = (Params)obj; //ép kiểu tham số về ₫ối tượng cần dùng
 int h, c, k;
 for (h = p.sr; h < p.er; h++) //lặp theo hàng
 for(c=0;c<N;c++){ //lặp theo cột
 double s = 0;
 for(k=0;k<N;k++)
 s=s+A[h,k]*B[k,c];
 C[h, c] = s;
 }
 stateLst[p.id] = 1; //ghi nhận trạng thái hoàn thành
 dateLst[p.id] = DateTime.Now.Subtract(t1);//tính thời gian chạy
}
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 20
9.5 Demo vấn ₫ề tương tranh giữa các thread
 Để demo vấn ₫ề tương tranh giữa các thread, ta hãy thử viết ứng
 dụng quản lý các thread với giao diện như sau :
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 21
9.5 Demo vấn ₫ề tương tranh giữa các thread
 Form là ma trận gồm nhiều cell, mỗi cell chứa ₫ược icon ảnh cho 1
 thread ₫ang chạy. Lúc ₫ầu, chưa có thread nào chạy hết. Người
 dùng có thể ấn phím ₫ể quản lý các thread như sau :
 . Ấ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.
 Để cho thấy hành vi hoạt ₫ộng của thread, hoạt ₫ộng của thread là
 hiểnthịiconmiêutảmìnhlênform,iconnàysẽchạytheo1
 phương xác ₫ịnh, khi ₫ụng thành form thì dội lại theo nguyên lý
 vật lý.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 22
9.5 Demo vấn ₫ề tương tranh giữa các thread
 Quan sát quỹ ₫ạo chạy icon miêu tả từng thread ta thấy thỉnh
 thoảng có hiện tượng icon thread này ₫è mất icon thread khác. Đây
 là hiện tượng lỗi không mong muốn do các thread ₫ược quyền tự
 do chiếm dụng từng cell hiển thị của form. Ta dùng thuật ngữ
 “tương tranh” giữa các thread trên các tài nguyên dùng chung (các
 cell của form).
 Cần có biện pháp quản lý tương tranh sao cho các thread không
 ₫ược quyền truy xuất tài nguyên dùng chung ₫ồng thời. Hiện nay
 ta dùng phương pháp loại trừ tương hỗ ₫ể giải quyết vấn ₫ề này.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 23
9.6 Demo việc giải quyết tương tranh giữa các thread
Mỗi lần muốn vào vùng
CS, ta phải gọi hàm
In_Control() ₫ể kiếm soát
việc thi hành vùng CS, khi
hoàn thành vùng CS, ta In_Control();
phải gọi hàm
 Vùng CS truy xuất tài 
Out_Control() ₫ể thông
 nguyên dùng chung
báo cho các thread khác
₫ang chờ ₫ể chúng kiểm Out_Control();
tra lại việc ₫i vào.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 24
9.6 Demo việc giải quyết tương tranh giữa các thread
 Phương pháp loại trừ tương hỗ phổ dụng hiện nay là dùng
 semaphore nhị phân (Mutex). Semaphore là 1 ₫ối tượng ₫ơn giản
 chứa :
 . 1 thuộc tính kiểu nguyên dương (s), ta còn gọi nó là biến
 semaphore.
 . Tác vụ down(), có nhiệm vụ giảm s 1 ₫ơn vị và luôn phải hoàn
 thành. Do ₫ó trong trường hợp s = 0, tác vụ down sẽ phải ngủ
 chờ ₫ến khi s 0 thì cố gắng thực hiện lại Thời gian thi
 hành tác vụ down là không xác ₫ịnh.
 . Tác vụ up(), có nhiệm vụ tăng s 1 ₫ơn vị và luôn phải hoàn
 thành. Trong trường hợp s = 0, tác vụ up sẽ phải ₫ánh thức các
 thread ₫ang ngủ chờ down s dậy.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 25
9.6 Demo việc giải quyết tương tranh giữa các thread
 Môi trường .Net cung cấp class Mutex ₫ể quản lý semaphore nhị
 phân. Ta kết hợp mỗi tài nguyên dùng chung 1 mutex m với giá trị
 ₫ầu = 1.
 Hàm In_Control() sẽ là lệnh m.WaitOne(); Thread nào thực hiện
 lệnh này ₫ầu tiên sẽ thành công ngay và sẽ chạy ₫ược ₫oạn lệnh CS
 truy xuất tài nguyên tương ứng. Các thread khác thực hiện lệnh
 trên ₫ể truy xuất tài nguyên dùng chung sẽ thất bại và bị ngủ trong
 khi thread ₫ầu chưa hoàn thành truy xuất.
 Khi hoàn thành việc truy xuất tài nguyên, thread gọi hàm
 Out_Control(). Trong trường hợp dùng Mutex, hàm Out_Control()
 sẽ là lệnh m.ReleaseMutex(); Nó sẽ ₫ánh thức các thread ₫ang ngủ
 chờ nếu có.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 26
9.6 Demo việc giải quyết tương tranh giữa các thread
//xin khóa truy xuất cell bắt ₫ầu (x1,y1)
mutList[x1,y1].WaitOne();
while (p.start) { //lặp trong khi chưa có yêu cầu kết thúc
 //hiển thị icon miêu tả mình lên cell
 //thực hiện công việc của thread
 //xác ₫ịnh vị trí mới của thread (x2,y2)
 //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ũ
 //giải phóng cell (x1,y1) cho các thread khác truy xuất
 mutList[y1, x1].ReleaseMutex();
} Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 27
9.7 Kết chương 
 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 Môn : Lập trình hướng ₫ối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 9 : Lập trình song song bằng VC#
 © 2010 Slide 28

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_9_lap_trinh_song.pdf