Skip to content

gyfantidis/ProcessThread

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

ProcessThread

Threads work

Ζητούμενο

image

Στην υποεργασία αυτή καλούμαστε να λύσουμε ένα πρόβλημα υπολογισμού με χρήση νημάτων που αφορά τον πολλαπλασιασμό πίνακα με διάνυσμα. Επειδή ο πίνακας και το διάνυσμα θα γεμίζουν με τυχαίους αριθμούς, φτιάξαμε μία μέθοδο (randomNumber) η οποία παράγει τυχαίους αριθμούς

image

Στην συνέχεια θα παρουσιάσουμε την λειτουργία του νήματος. Κάθε νήμα θα εισάγει έναν πίνακα και ένα διάνυσμα, το νήμα θα κάνει τον πολλαπλασιασμό του πίνακα με το διάνυσμα και το αποτέλεσμα θα το επιστρέφει σε νέο διάνυσμα.

image

Το νέο διάνυσμα αποφασίσαμε να το δημιουργήσουμε δυναμικά με ArrayList. Τέλος με την μέθοδο getNewVector επιστρέφουμε το νέο διάνυσμα.

image

Για την εισαγωγή των διαστάσεων του πίνακα και αριθμό των threads που θα χρησιμοποιήσουμε , επιλογή από τον χρήστη, χρησιμοποιούμε την μέθοδο Scanner.in

Πρώτα επιλέγει ο χρήστης τον αριθμό των threads, με έλεγχο αν επέλεξε αριθμό δύναμη του 2

image

Στην συνέχεια επιλέγει ο χρήστης τις διαστάσεις του πίνακα με τους ελέγχους αν οι γραμμές του πίνακα είναι δύναμη του 2 και μεγαλύτερος αριθμός από τα threads, και οι στήλες του πίνακα να είναι τουλάχιστον 1 στήλη.

image

Αφού έχουμε τις διαστάσεις των πινάκων τους δημιουργούμε, Τον δισδιάστατο πίνακα Α με διαστάσεις nXm (οι διαστάσεις που έδωσε ο χρήστης) Τον μονοδιάστατο πίνακα του διανύσματος με μέγεθος όσο οι στήλες του πίνακα Α Και τον μονοδιάστατο πίνακα του νέου διανύσματος που θα προκύψει μετά τον πολλαπλασιασμό, εδώ επιλέξαμε δυναμικό πίνακα.

Στην συνέχεια γεμίζουμε με την χρήση της μεθόδου randomNumber και την χρήση διαφόρων loops, τους πίνακες Α και το διάνυσμα με τυχαίους αριθμούς (0-10).

image

Δημιουργούμε τον πίνακα των threads, διαιρούμε τις γραμμές του πίνακα με τον αριθμό των threads (βγαίνει ακέραιος αριθμός λόγω τον περιορισμών που έχουμε), έτσι σπάμε τον πίνακα σε παρτίδες. Κάθε παρτίδα πάει σε διαφορετικό thread.

image

Σε κάθε thread που τρέχει περνάει η παρτίδα (κομμάτι) του πίνακα και το διάνυσμα

image

Για την συμπλήρωση του νέου διανύσματος χρησιμοποιούμε την μέθοδο getNewVector με μια λούπα που θα μας εισάγει τις τιμές από όλα τα threads

image

image

About

Threads work

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages