Danh mục

ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA PHẦN 9

Số trang: 28      Loại file: pdf      Dung lượng: 387.44 KB      Lượt xem: 12      Lượt tải: 0    
Hoai.2512

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tham khảo tài liệu 'đồ án tốt nghiệp tìm hiểu ngôn ngữ c# và viết một ứng dụng minh họa phần 9', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA PHẦN 9 Thread và Sự Đồng Bộ Gvhd: Nguyễn Tấn Trần Minh Khang void Decrementer( ) { try { // synchronize this area of code Monitor.Enter(this); // if counter is not yet 10 // then free the monitor to other waiting // threads, but wait in line for your turn if (counter < 10) { Console.WriteLine( [{0}] In Decrementer. Counter: {1}. Gotta Wait!, Thread.CurrentThread.Name, counter); Monitor.Wait(this); } while (counter >0) { long temp = counter; temp--; Thread.Sleep(1); counter = temp; Console.WriteLine([{0}] In Decrementer. Counter: {1}., Thread.CurrentThread.Name, counter); } } finally { Monitor.Exit(this); } } void Incrementer( ) { try { Monitor.Enter(this); while (counter < 10) { long temp = counter; temp++; Thread.Sleep(1); counter = temp; Console.WriteLine([{0}] In Incrementer. Counter: {1}, Thread.CurrentThread.Name, counter); } // I'm done incrementing for now, let another // thread have the Monitor Monitor.Pulse(this); } finally { Console.WriteLine([{0}] Exiting..., Thread.CurrentThread.Name); Monitor.Exit(this); } } private long counter = 0; } 220 Thread và Sự Đồng Bộ Gvhd: Nguyễn Tấn Trần Minh Khang } Kết quả: Started thread Thread1 [Thread1] In Decrementer. Counter: 0. Gotta Wait! Started thread Thread2 [Thread2] In Incrementer. Counter: 1 [Thread2] In Incrementer. Counter: 2 [Thread2] In Incrementer. Counter: 3 [Thread2] In Incrementer. Counter: 4 [Thread2] In Incrementer. Counter: 5 [Thread2] In Incrementer. Counter: 6 [Thread2] In Incrementer. Counter: 7 [Thread2] In Incrementer. Counter: 8 [Thread2] In Incrementer. Counter: 9 [Thread2] In Incrementer. Counter: 10 [Thread2] Exiting... [Thread1] In Decrementer. Counter: 9. [Thread1] In Decrementer. Counter: 8. [Thread1] In Decrementer. Counter: 7. [Thread1] In Decrementer. Counter: 6. [Thread1] In Decrementer. Counter: 5. [Thread1] In Decrementer. Counter: 4. [Thread1] In Decrementer. Counter: 3. [Thread1] In Decrementer. Counter: 2. [Thread1] In Decrementer. Counter: 1. [Thread1] In Decrementer. Counter: 0. All my threads are done. 20.3 Race condition và DeadLock Đồng bộ hóa thread khá rắc rối trong những chương trình phức tạp. Bạn cần phải cẩn thận kiểm tra và giải quyết các vấn đề liên quan đến đồng bộ hóa thread: race condition và deadlock 20.3.1 Race condition Một điều kiện tranh đua xảy ra khi sự đúng đắn của ứng dụng phụ thuộc vào thứ tự hoàn thành không kiểm soát được của 2 thread độc lập với nhau. Ví dụ: giả sử bạn có 2 thread. Thread 1 tiến hành mở tập tin, thread 2 tiến hành ghi lên cùng tập tin đó. Điều quan trọng là bạn cần phải điều khiển thread 2 sao cho nó chỉ tiến hành công việc sau khi thread 1 đã tiến hành xong. Nếu không, thread 1 sẽ không mở được tập tin vì tập tin đó đã bị thread 2 mở để ghi. Kết quả là chương trình sẽ ném ra exception hoặc tệ hơn nữa là crash. Để giải quyết vấn đề trong ví dụ trên, bạn có thể tiến hành join thread 2 với thread 1 hoặc thiết lập monitor. 20.3.2 Deadlock Giả sử thread A đã nắm monitor của tài nguyên X và đang chờ monitor của tài nguyên Y. Trong khi đó thì thread B lại nắm monitor của tài nguyên Y và chờ 221 Thread và Sự Đồng Bộ Gvhd: Nguyễn Tấn Trần Minh Khang monitor của tài nguyên X. 2 thread cứ chờ đợi lẫn nhau mà không thread nào có thể thoát ra khỏi tình trạng chờ đợi. Tình trạng trên gọi là deadlock. Trong một chương trình nhiều thread, deadlock rất khó phát hiện và gỡ lỗi. Một hướng dẫn để tránh deadlock đó là giải phóng tất cả lock đang sở hữu nếu tất cả các lock cần nhận không thể nhận hết được. Một hướng dẫn khác đó là giữ lock càng ít càng tốt. 222 Luồng dữ liệu. Gvhd: Nguyễn Tấn Trần Minh Khang Chương 21 Luồng dữ liệu. Khi muốn đọc hay ghi dữ liệu vào/ra tập tin hay muốn truyền dữ liệu từ máy này sang máy khác, ta phải tổ chức dữ liệu theo cấu trúc tuần tự các byte hay các gói tin …. Điều này dễ liên tưởng dữ liệu như là các luồng dữ liệu chảy từ từ nguồn đến đích. Thư viện .NET Framework cung cấp các lớp Stream (Stream và các lớp thừa kế từ nó) để chương trình có thể sử dụng trong các thao tác nhập xuất dữ liệu như doc/ghi tập tin, truyền dữ liệu qua mạng … 21.1 Tập tin và thư mục Các lớp đề cập trong chương này thuộc về vùng tên System.IO. Các lớp này bao gồm lớp File mô phỏng cho một tập tin trên đĩa, và lớp Directory mô phỏng cho một thư mục trên đĩa. 21.1.1 Làm việc với thư mục Lớp Directory có nhiều phương thức dành cho việc tạo, di chuyển, duyệt thư mục. Các phương thức trong lớp Directory đều là phương thức tĩnh;vì vậy không cần phải tạo một thể hiện lớp Directory mà có thể truy xuất trực tiếp từ tên lớp. Lớp DirectoryInfo là lớp tương tự như lớp Directory. Nó cung các tất cả các phương thức mà lớp Directory có đồng thời bổ sung nhiều ...

Tài liệu được xem nhiều: