1 / 24

MULTI-THREADING PROGRAMMING Csharp

MULTI-THREADING PROGRAMMING Csharp. (LẬP TRÌNH ĐA LUỒNG). NỘI DUNG. Các khái niệm vê ̀ Thread Tạo va ̀ diều khiển Thread Tạo Thread Truyền dữ liệu cho Thread Đô ̣ ưu tiên của Thread Các vấn đê ̀ của Thread Vấn đê ̀ Race Condition Vấn đê ̀ Deadlock

Download Presentation

MULTI-THREADING PROGRAMMING Csharp

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MULTI-THREADING PROGRAMMINGCsharp (LẬP TRÌNH ĐA LUỒNG)

  2. NỘI DUNG • Cáckháiniệmvề Thread • Tạovà diềukhiển Thread • Tạo Thread • Truyềndữliệucho Thread • Độ ưutiêncủa Thread • Cácvấnđề của Thread • Vấnđề Race Condition • Vấnđề Deadlock • Cáckỹthuậtđồngbộ

  3. Thread (concurrent programming) LậpTrìnhĐồngThời • Thread: Làmộtphần code cóthểthựchiệnđượctrongchươngtrình • Mộtứngdụnglàmộttậphợpnhiềunhiệmvụ(Task), mỗinhiệmvụđượcgánchomột Thread • Nhiều Thread đượcthựchiệnđồngthờiđượcgọilà Multiple Threading

  4. Thread (concurrent programming) LậpTrìnhĐồngThời • Khimộtứngdụng C# ở phía client đượcthựcthithìmột thread đượctựđộngtạorabởi CLR gọilà Main thread. • Từ Main thread tacóthểtạoracác Thread khác. • CLR cấpchomỗi Thread mộtvùngnhớriêngđểlưucácbiếncụcbộcủanó.

  5. Ứngdụngcủa Thread • Duytrìsựđápứngcủagiaodiệnđốivớithaotáccủangườidùng • Sửdụng CPU hiệuquảhơn • Chươngtrìnhthựchiệnnhanhhơn • Cho phépcácyêucầucóthểxửlýđồngthời

  6. TạoThreads • Tạomộtđốitượngthuộc class Thread vàtruyềnchonóphươngthứcsẽthựchiệnkhi Thread bắtđầuthựcthi (start) • Gọiphươngthức start đểbắtđầumột Thread • Truyềnthamsốcho Thread: • Thông qua phươngthức start (chỉdùngđượckhiphươngthứccó 1 thamsốkiểu Object) • Dùngbiểuthức Lambda khitạođốitượng (Phươngthứccósốthamsốvàkiểudữliệutùy ý)

  7. Tạo Threads (cont.) • Vídụ: Tạo, thựchiện Thread

  8. Tạo Threads (cont.) • Vídụ: Tạovàthựchiện Thread

  9. Phươngthức Join • Join: yêucầu “call thread” phảichờcác “called thread” kếtthúcrồimớikếtthúc • Vídụ: Khôngsửdụng join

  10. Phươngthức Sleep • Vídụ: sửdụngphươngthức join

  11. Phươngthức Sleep • Tạmdừng thread hiệntạitrongmộtkhoảngthờigian (tinhbằngmilisecond) • Khimột thread ở trạngthái sleep thìcpuđượcdùngbởi Thread khác • Vídụ: Khôngdùng sleep

  12. Phươngthức Sleep • Vídụ: Sửdụngthread.Sleep

  13. Độưutiêncủa Thread (Thread Priority) • Cho phépHệđiềuhànhquyếtđịnh: • Thờigiansửdụng CPU của Thread • Cơhộinhậnquyềnsửdụng CPU • Độưutiênđượcgánbằngmộttrongcácgiátrịcủaenum: • Vídụ:

  14. Hợpnhấtcác Thread (Thread Pooling) • Cho phépquảnlýcác Thread hiệuquảhơn • Quyếtđịnhkhinàothì start một thread • Cho phép qui địnhsố Thread tốiđa, tốithiểucóthểthựchiệnđồngthời

  15. Cácvấnđềkhisửdụng Thread (Threading Issues ) • Race Condition: Xuấthiệnkhihai hay nhiều Thread truyxuấtcùngmộttàinguyêntạicùngmộtthờiđiểm. • Vídụ: Xuấtthôngbáokhi state!=6

  16. Cácvấnđềkhisửdụng Thread (Threading Issues ) • Race Condition: • Tạo 20 Thread, mỗi Thread sẽthựchiệnhàmRaceCondition , thamsốtruyềncho 20 Thread làđốitượng state dẫnđến Race Condition • Nguyênnhân?

  17. Cácvấnđềkhisửdụng Thread (Threading Issues ) Đồngbộgiữacác Thread (Synchronization ): • Đểtránhtìnhtrạng Race Codition sửdụnggiảiphápđộngbộ (Synchronization). • Synchronization: một Thread khimuốnsửdụngmộttàinguyên (nếuchưasửdụngbởinhững Thread khác), nósẽ lock tàinguyênđóchođếnkhisửdụngxong. Các thread khácmuốnsửdụngtàinguyênnàyphảichờđếnkhitàinguyênđược unlock.

  18. Cácvấnđềkhisửdụng Thread (Threading Issues ) Đồngbộgiữacác Thread (Synchronization ): • Dùngcơchế Locking đểđồngbộ: Lock trênmộtđốitượngtrướckhithựchiệnlệnh Unlock đốitượngkhithựchiệnxong

  19. Cácvấnđềkhisửdụng Thread (Threading Issues ) Đồngbộgiữacác Thread (Synchronization ): • Đốitượngdùngtrong Lock: • Visible chotấtcảcácphầncủa Thread (thườngkhaibáotrong class) • Phảicókiểulà reference • Pham vi trong class: Private, Readonly

  20. Cácvấnđềkhisửdụng Thread (Threading Issues ) Deadlock :xảyrakhihai Thread cùngchờđểsửdụngtàinguyênđang lock bởi Thread kia (Thread 1 cố lock đốitượngđangsửdụngbởi Thread 2 vàngượclại) • Đểngănchặn Deadlock: DùngMonitor.TryEntervới timeout

  21. Cơchế Wait-Notify • Dùngđểđiềukhiểnsựphốihợpgiữacác Thread • Bàitoán Producer-Consumer (sảnxuất – Tiêuthụ) • C# dùngđốitượngcủalớpEventWaitHandleđểcàiđặtcơchếWait-Notify • CácphươngthứccủaEventWaitHandle: • WaitOne: Block Thread hiệntại, chođếnkhinhậnđược Notify từmột Thread khác • Set: Notify các Thread đang ở chếđộ waiting • Vídụ: xemvídụnonWaitNotifyvàThreadWaitNotify

  22. Cơchế Wait-Notify • Viết chương trình mô phỏng bài toán “nhà sản xuất - người tiêu thụ”. Các Nsx sản xuất ra các số nguyên, đặt vào kho, các Ntt lấy các số này ra sử dụng. Yêu cầu đặt ra: • Nsx phải tạm ngừng sx khi kho đầy • Ntt phải tạm ngừng tt khi kho rỗng • Khi Nsx và Ntt không được truy xuất kho đồng thời.

  23. Bài tập 1 • Viết chương trình gồm hai tiểu trình thực thi đồng thời, một tiểu trình in các kí tự từ ‘a’ đến ‘z’, một tiểu trình in số từ 1 đến 26. • Viết lại chương trình trên sao cho hai tiểu trình in luân phiên, kết quả có dạng sau: 1 a 2 b 3 c 4 d …

  24. Bài tập 2 • Viết chương trình thực hiện n bài toán cộng ngẫu nhiên. Khi gần hết giờ sẽ kêu ba tiếng “bíp”, mỗi tiếng cách nhau 2 giây, sau đó thông báo hết giờ, và đóng chương trình. Thời gian làm bài qui định là n giây (không tính thời gian thông báo hết giờ). Khi đang kêu “bíp” vẫn có thể làm bài. • Hướng dẫn: có hai công việc • Công việc 1: lần lượt cho n bài tóan cộng để người sử dụng làm. • Công việc 2: khi hết giờ, kêu ba tiếng và thông báo “hết giờ”. • Cv1 được làm ngay, cv2 khi hết giờ

More Related