Đa luồng (Multithread) trong C | 85 bài học lập trình C hay nhất PDF

11 196 0
Đa luồng (Multithread) trong C  | 85 bài học lập trình C  hay nhất PDF

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Đa luồng (Multithread) C# Một thread định nghĩa đường truyền thực thi (execution path) chương trình Mỗi Thread định nghĩa dòng điều khiển Nếu application bạn gồm hoạt động phức tạp tốn thời gian, thường hữu ích thiết lập execution path Thread, với Thread thực công việc cụ thể Các Thread tiến trình nhẹ Một ví dụ phổ biến sử dụng Thread triển khai lập trình tương tranh (concurrent programming) hệ điều hành đại Sử dụng Thread tiếp kiệm hao phí CPU cycle tăng hiệu application Tới chương này, viết chương trình mà Thread đơn chạy tiến trình đơn, trình chạy thể application Tuy nhiên, theo cách này, application thực cơng việc thời điểm Để làm thực thi nhiều tác vụ thời điểm, phân chia thành Thread nhỏ Vòng đời Thread C# Vòng đời Thread bắt đầu đối tượng lớp System.Threading.Thread tạo kết thúc Thread kết thúc hoàn thành việc thực thi Dưới trạng thái đa dạng vòng đời Thread C#:  Unstarted State: Nó tình instance Thread tạo, phương thức Start chưa gọi  Ready State: Nó tình Thread sẵn sàng để chạy đợi CPU cycle  Not Runnable State: Một Thread thực thi (not executable), khi:  o Phương thức Sleep gọi o Phương thức Wait gọi o Bị ngăn chặn hoạt động I/O Dead State: Nó tình Thread hồn thành thực thi bị hủy bỏ http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Main Thread C# Trong C#, lớp System.Threading.Thread sử dụng để làm việc với Thread Nó cho phép tạo truy cập Thread riêng biệt Multithreaded Application Thread để thực thi tiến trình gọi Main Thread C# Khi chương trình C# bắt đầu thực thi, Main Thread tự động tạo Các Thread, tạo sử dụng lớp Thread, gọi Thread Main Thread Bạn truy cập Thread sử dụng thuộc tính CurrentThread lớp Thread Dưới chương trình ví dụ minh họa cho thực thi Main Thread C#: using System; using System.Threading; namespace MultithreadingApplication { class MainThreadProgram { static void Main(string[] args) { Thread th = Thread.CurrentThread; th.Name = "MainThread"; Console.WriteLine("This is {0}", th.Name); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: This is MainThread Thuộc tính Phương thức lớp Thread C# Bảng liệt kê số thuộc tính sử dụng phổ biến lớp Thread C#: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Thuộc tính Miêu tả CurrentContext Lấy ngữ cảnh (context) mà Thread thực thi CurrentCulture Lấy thiết lập culture gồm language, date, time, currency, … cho Thread CurrentPrinciple Lấy thiết lập nguyên lý Thread CurrentThread Lấy Thread chạy CurrentUICulture Lấy thiết lập culture sử dụng Resource Manager để tìm kiếm cho Resource cụ thể runtime ExecutionContext Lấy đối tượng ExecutionContext mà chứa thông tin context đa dạng Thread IsAlive Lấy giá trị trạng thái thực thi Thread IsBackground Lấy thiết lập giá trị có hay khơng Thread Background Thread IsThreadPoolThread Lấy giá trị có hay khơng Thread Managed Thread Pool ManagedThreadId Lấy định danh cho Managed Thread Name Lấy thiết lập tên Thread Priority Lấy thiết lập giá trị quyền ưu tiên Thread http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp ThreadState Copyright © vietjack.com Lấy giá trị chứa trạng thái Thread Bảng liệt kê phương thức sử dụng phổ biến lớp Thread C#: STT Phương thức public void Abort() Tạo ThreadAbortException Thread mà triệu hồi, để bắt đầu tiến trình kết thúc Thread Gọi phương thức thường kết thúc Thread public static LocalDataStoreSlot AllocateDataSlot() Cấp phát Unnamed Data Slot cho tất Thread Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay public static LocalDataStoreSlot AllocateNamedDataSlot(string name) Cấp phát Named Data Slot cho tất Thread Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay public static void BeginCriticalRegion() Thông báo cho host thực thi chuẩn bị vào khu vực code, mà ảnh hưởng việc hủy bỏ Thread Exception không xử lý gây nguy hại tới tác vụ khác miền ứng dụng public static void BeginThreadAffinity() Thông báo cho Host Managed code chuẩn bị thực thi lệnh mà phụ thuộc vào tính đồng Physical operating system thread public static void EndCriticalRegion() Thông báo cho host thực thi chuẩn bị vào khu vực code, mà ảnh hưởng hủy bỏ Thread Exception không xử lý http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com bị hạn chế tới tác vụ public static void EndThreadAffinity() Thông báo cho Host Managed code kết thúc việc thực thi lệnh mà phụ thuộc vào tính đồng Physical Operating System Thread public static void FreeNamedDataSlot(string name) Loại bỏ liên kết name slot, cho tất Thread tiến trình Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay public static Object GetData(LocalDataStoreSlot slot) Thu hồi giá trị từ slot xác định Thread tại, bên miền Thread Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay 10 public static AppDomain GetDomain() Trả miền Thread chạy 11 public static AppDomain GetDomain() Trả định danh miền ứng dụng 12 public static LocalDataStoreSlot GetNamedDataSlot(string name) Tìm kiếm Named Data Slot Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay 13 public void Interrupt() Interrupt (ngắt) Thread mà trạng thái WaitSleepJoin 14 public void Join() http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Chặn Thread gọi tới Thread kết thúc, tiếp tục thực COM SendMessage Pumping Phương thức có mẫu nạp chồng khác 15 public static void MemoryBarrier() Đồng truy cập nhớ sau: Prosessor thực thi Thread xếp lại lệnh theo cách quyền truy cập nhớ tới lời gọi đến MemoryBarrier thực thi sau truy cập nhớ mà theo sau lời gọi đến MemoryBarrier 16 public static void ResetAbort() Hủy Abort yêu cầu cho Thread 17 public static void SetData(LocalDataStoreSlot slot, Object data) Thiết lập liệu slot cho Thread chạy tại, cho miền Thread Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay 18 public void Start() Bắt đầu Thread 19 public static void Sleep(int millisecondsTimeout) Làm Thread dừng khoảng thời gian 20 public static void SpinWait(int iterations) Làm Thread đợi khoảng thời gian xác định tham số iterations 21 public static byte VolatileRead(ref byte address) public static double VolatileRead(ref double address) public static int VolatileRead(ref int address) http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com public static Object VolatileRead(ref Object address) Đọc giá trị Field Giá trị viết Prosessor máy tính, khơng quan tâm đến số lượng Prosessor trạng thái Prosessor Cache Phương thức có mẫu nạp chồng khác Đó form 22 public static void VolatileWrite(ref byte address,byte value) public static void VolatileWrite(ref double address, double value) public static void VolatileWrite(ref int address, int value) public static void VolatileWrite(ref Object address, Object value) Ghi giá trị tới Field lập tức, giá trị nhìn thấy cho tất Processor máy tính Phương thức có mẫu nạp chồng khác Đó form 23 public static bool Yield() Làm Thread gọi chuyển thực thi cho Thread khác mà sẵn sàng để chạy Processor Hệ điều hành chọn Thread để chuyển tới Tạo Thread C# Trong C#, Thread tạo việc kế thừa lớp Thread Sau đó, Lớp Thread kế thừa gọi phương thức Start() để bắt đầu thực thi Thread Sau ví dụ minh họa việc tạo Thread C#: using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: In Main: Creating the Child thread Child thread starts Quản lý Thread C# Lớp Thread C# cung cấp phương thức đa dạng để quản lý Thread Ví dụ sau minh họa cách sử dụng phương thức sleep() để làm Thread dừng khoảng thời gian cụ thể using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com public static void CallToChildThread() { Console.WriteLine("Child thread starts"); // the thread is paused for 5000 milliseconds int sleepfor = 5000; Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000); Thread.Sleep(sleepfor); Console.WriteLine("Child thread resumes"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: In Main: Creating the Child thread Child thread starts Child Thread Paused for seconds Child thread resumes Hủy Thread C# Phương thức Abort() sử dụng để hủy Thread C# Trong thời gian runtime, chương trình hủy bỏ Thread việc ném mộtThreadAbortException Exception bắt, điều khiển gửi tới khốifinally, không http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Dưới chương trình minh họa việc sử dụng phương thức Abort() để hủy bỏ Thread C#: using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { try { Console.WriteLine("Child thread starts"); // some work, like counting to 10 for (int counter = 0; counter

Ngày đăng: 02/12/2017, 19:58

Từ khóa liên quan

Mục lục

  • Đa luồng (Multithread) trong C#

    • Vòng đời của Thread trong C#

    • Main Thread trong C#

    • Thuộc tính và Phương thức của lớp Thread trong C#

    • Tạo Thread trong C#

    • Quản lý Thread trong C#

    • Hủy Thread trong C#

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan