Giúp Mình Tìm Hiểu Về đa Luồng Trong C++ [Archive]

Diễn Đàn Tin Học > Lập trình > Các ngôn ngữ lập trình > C/C++ > Giúp mình tìm hiểu về đa luồng trong C++ PDA

View Full Version : Giúp mình tìm hiểu về đa luồng trong C++

Black_mash27-10-2007, 10:34Mình phải làm một bài tập về đa luồng nhân ma trận trong C++. Nếu chỉ làm bài tập đơn giản về nhân ma trận thì mình có thể làm được, nhưng thầy bảo ko đúng. Mình ko hiểu đa luồng là như thế nào? khi mình có 2 ma trận, theo mình phải kiểm tra 2 ma trận có phù hợp hay ko rùi mới nhân. Còn cách xử lý nào nữa nhỉ? Note: mình đang học hệ điều hành, thường thì hệ điều hành thường xử lí nhiều luồng một lúc nên thầy yêu cầu xây dựng chương trình nhân ma trận theo đa luồng. can_qua27-10-2007, 13:53"Đa luồng", chắc là ý bạn muốn nói đến khái niệm "multithreading", một kỹ thuật cho phép bạn xử lý hai hay nhiều công việc đồng thời. Nếu đúng như vậy thì theo mình biết là các thư viện C/C++ "chuẩn" chưa hỗ trợ. Tuy nhiên, tùy theo hệ điều hành và tùy theo bộ công cụ phát triển của từng hãng mà ta có thể xử dụng các OS's multithreading API, hay là các thư viện hỗ trợ. Ví dụ như trên Unix/Linux, ta có PThread, trên Windows ta có WIN32 thread, trong thu viện MFC của Microsoft Visual Studio thì có class CWinThread (thực chất là bên trong nó cũng xử dụng Win32 thread), v.v... bạn có thể tìm hiểu thêm để xử dụng. Vấn đề quan trọng là bạn phải tìm ra một cách nào đó để chia một công việc lớn thành những công việc nhỏ mà trong đó có những việc có thể thực hiện một cách đồng thời. Ví dụ, mẹ giao việc cho con là "làm việc xong mới được đi coi xi-nê". "Công việc lớn" này có thể gồm 3 việc nhỏ "quét nhà", "rửa chén", và đi coi "xi-nê". Trong đó chỉ được "coi xi-nê" sau khi làm xong hai việc kia. Rõ ràng là bạn muốn làm xong việc nhà càng sớm càng tốt để vi vút, nên bạn kêu thằng em bạn quét nhà, bạn thì rửa chén, cả hai người cùng làm đồng thời. Rửa chén xong trước, bạn phải đợi thằng em bạn thông báo là quét nhà cũng xong thì bạn mới vù đi coi xi-nê được. Như vậy multithread cho "rửa chén" và "quét nhà" làm tăng hiệu suất thực hiện công việc của bạn (so với việc bạn làm tuần tự rửa chén, quét nhà, coi xi-nê). Mình lấy ví dụ như vậy cho dễ hiểu, với lại thực ra mình cũng không hiểu nhân ma trận là cái gì nên không thể giúp bạn được, nhưng trên nguyên tắc, việc áp dụng multithreading cho việc nhân 2 ma trận cũng tương tư như vậy. bete27-10-2007, 14:07Khái niệm đa luồng thì can_qua đã giải thích 1 cách bình dân và dễ hiểu rồi Còn muốn áp dụng vô nhân 2 ma trận thì bạn phải chịu khó tìm thêm trên mạng vậy: http://www.google.com/search?hl=en&q=parallel+multiply+matrix&btnG=Google+Search -thân bete28-10-2007, 10:52Tui nghĩ nếu bạn coi trên mạng thì có lẽ hơi khó hiểu Nói đơn giản: giả sử C = A . B thì +--------+ +---------+ +---------+ | A1 | | | | C1 | +--------+ | B | +---------+ | A2 | | | | C2 | +--------+ +---------+ +---------+ A1 . B = C1 A2 . B = C2 => luồng 1: tính C1 = A1 . B và luồng 2: tính C2 = A2 . B hoặc +-------+ +----+----+ +----+----+ | | | | | | | | | A | | B1 | B2 | | C1 | C2 | | | | | | | | | +-------+ +----+----+ +----+----+ A . B1 = C1 A . B2 = C2 => luồng 1: tính C1 = A . B1 và luồng 2: tính C2 = A . B2 hoặc +--------+ +----+----+ +----+----+ | A1 | | | | | C1 | C2 | +--------+ | B1 | B2 | +----+----+ | A2 | | | | | C3 | C4 | +--------+ +----+----+ +----+----+ A1 . B1 = C1 A1 . B2 = C2 A2 . B1 = C3 A2 . B2 = C4 => luồng 1: tính C1 = A1 . B1 và luồng 2: tính C2 = A1 . B2 và luồng 3: tính C3 = A2 . B1 và luồng 4: tính C4 = A2 . B2 (hiểu biết nông cạn; có gì sai sót mong được góp ý, xin cám ơn) -thân Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.

Từ khóa » đa Luồng C++