DarkLord22 Δημοσ. 29 Μαΐου 2009 Δημοσ. 29 Μαΐου 2009 Γεια! εργασια 3 εκανα καπια πραγματα αλλα δυσκολευομαι κανεις? εκφωνηση: http://eclass.teilam.gr/DI118/document/%C5%F1%E3%E1%F3%F4%DE%F1%E9%EF/%DC%F3%EA%E7%F3%E73.pdf Βήμα 1 Ας χρησιμοποιήσουμε ένα thread για να προσομοιώσουμε μια CPU. Έστω ότι έχουμε n διαφορετικούς ακεραίους x0, x1, ..., xn-1. Αρχικά, αρχικοποιούμε έναν πίνακα w με n στοιχεία με 1. Αυτό μπορεί να γίνει με n threads καθένα από τα οποία γράφει ένα 1 σε μία θέση του πίνακα. Βήμα 2 Για κάθε ζευγάρι ακεραίων xi και xj δημιουργούμε ένα thread (η μία CPU) Tij. Αυτό το thread συγκρίνει xi και xj και γράφει ένα 0 στην θέση wi εάν xi < xj. Διαφορετικά, γράφει ένα 0 στην θέση wj. Για τον λόγο αυτό σε αυτό το βήμα χρειαζόμαστε n(n-1)/2 threads, καθένα από τα οποία εκτελεί ένα βήμα για να συγκρίνει και να γράψει. Βήμα 3 Αυτό το βήμα απαιτεί n threads. To thread i ελέγχει την τιμή wi. Εάν είναι 0 δεν κάνει τίποτα. Εάν είναι 1 εκτυπώνει την τιμή του xi επειδή είναι η μέγιστη τιμή που ψάχναμε. Έτσι εάν έχουμε n(n-1)/2 threads (ή CPUs) απαιτούνται μόνο 3 συγκρίσεις ανά CPU για να βρούμε το μέγιστο. Γράψτε ένα πρόγραμμα που να υλοποιεί τον παραπάνω αλγόριθμο. Τα διάφορα θέματα συγχρονισμού που μπορεί να προκύψουν θα πρέπει να λυθούν με κατάλληλο μηχανισμό. Υπάρχει τέτοιος μηχανισμός με χρήση κατάλληλων συναρτήσεων που θα δοθούν παρακάτω. Η κύρια βιβλιοθήκη που θα χρειαστείτε για να υλοποιήσετε τα παραπάνω είναι η pthread.h, άρα #include <pthread.h> και το compilation θα πρέπει να γίνεται με την παράμετρο -lpthread #include <pthread.h> #include <stdio.h> int a=0; pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; int n,M; void *stoixeia(void *param); void *Tij(void *param); void *sigrisi(void *param); int main(int argc, char *argv[n]) { const pthread_t tid; const pthread_attr_t attr; if (argc!=2) { fprintf(stderr, “usage: a.out <integer value>\n”); return -1; } if (atoi(argv[n]) <0) { fprintf(stderr, “%d must be >= 0\n”, atoi(argv[n])); return -1; } pthread_attr_init(&attr); for (M= 1; M < n; M++) pthread_create(&tid,&attr,stoixeia,argv[n],M); pthread_join(tid,NULL); printf(“sum=%d\n”,sum); for (i= 1,j=1; i,j < n(n-1)/2; i++,j=i+1) pthread_create(&tid,&attr,Tij,argv[n],i,j); for (i= 1; i < n; i++) pthread_create(&tid,&attr,sigrisi,argv[n],i); { char *e_str="Hello!"; char *f_str="Bonjour!"; pthread_t e_th1; pthread_t f_th1; pthread_t e_th2; pthread_t f_th2; int rc; rc=pthread_create(&e_th1, NULL, myThread, (void *)e_str); if (rc) exit(-1); rc=pthread_create(&f_th1, NULL, myThread, (void *)f_str); if (rc) exit(-1); rc=pthread_create(&e_th2, NULL, myThread, (void *)e_str); if (rc) exit(-1); rc=pthread_create(&f_th2, NULL, myThread, (void *)f_str); if (rc) } void *stoixeia(argv[n],M) { argv[M]=1 pthread_exit(0); } void *Tij(argv[n],i,j) { if argv<argv[j] argv=0; else argv[j]=0; pthread_exit(0); void *sigrisi(argv[n],i) { int i; if argv=1 printf (argv); pthread_exit(0); } αυτη ειναι η τελευταια μαλλον βοηθεια!!! :shifty:
ClockOrange Δημοσ. 29 Μαΐου 2009 Δημοσ. 29 Μαΐου 2009 Xaxa α ρε Λαμια αθάνατη..καλα και ο καθηγητής απο τους ποιό δύσκολους..Καλο κουράγιο φίλε μου
DarkLord22 Δημοσ. 29 Μαΐου 2009 Μέλος Δημοσ. 29 Μαΐου 2009 αστα να πανε.. τισ προιγουμενες κατι καταλαβαινα σε αυτη μας ειπε ενοστετα και τελειοσατε... αλλα δεν ειναι τοσο ευκολο τελικα...
narbi Δημοσ. 29 Μαΐου 2009 Δημοσ. 29 Μαΐου 2009 αστα να πανε.. τισ προιγουμενες κατι καταλαβαινα σε αυτη μας ειπε ενοστετα και τελειοσατε... αλλα δεν ειναι τοσο ευκολο τελικα... H άσκσηση είναι τόσο ευκολή.. και ειδικά με τόσα στοιχεία που σας δίνει που θέλω να γελάσω.. Η αμέσως επόμενη βοήθεια θα ήταν να σας δώσει τη λύση..! Μου αρεσει που τη ποστάρεις κιόλας με τίτλο "άσκηση 3 - λειτουργικά"...
irini22 Δημοσ. 30 Μαΐου 2009 Δημοσ. 30 Μαΐου 2009 Μηπως μπορει κανεις να την λυσει; ---------- Το μήνυμα προστέθηκε στις 17:06 ---------- ξερεις την λυση της μηπως;
narbi Δημοσ. 30 Μαΐου 2009 Δημοσ. 30 Μαΐου 2009 Μηπως μπορει κανεις να την λυσει; Φαντάζομαι πολλοί μπορούν να τη λύσουν.. ξερεις την λυση της μηπως; Ξέρω τη λύση.. Την έχω ήδη λύσει..
bokarinho Δημοσ. 30 Μαΐου 2009 Δημοσ. 30 Μαΐου 2009 Φαντάζομαι πολλοί μπορούν να τη λύσουν.. Ξέρω τη λύση.. Την έχω ήδη λύσει.. Ξύνεσαι και εσύ narbi όμως , ίσως και άλλοι να ξέρουμε την λύση το θέμα είναι να την βρούνε μόνοι τους, προς θεού κάποια στιγμή θα πρέπει να μάθετε και 5 βασικά πράγματα.
narbi Δημοσ. 30 Μαΐου 2009 Δημοσ. 30 Μαΐου 2009 Ξύνεσαι και εσύ narbi όμως , ίσως και άλλοι να ξέρουμε την λύση το θέμα είναι να την βρούνε μόνοι τους, προς θεού κάποια στιγμή θα πρέπει να μάθετε και 5 βασικά πράγματα. Αυτό λέω κι εγώ bokarinho.. To έκανες και quote...Πολλοί ξέρουν τη λύση... Αλλα κανένας δε θα τη δώσει... Εγώ όταν είχα το ίδιο μάθημα είχα ζητήσει βοήθεια απο εδώ κι εσύ απλόχερα την είχες δώσει... Δεν μπήκα όμως να δώσω απλά την εκφώνηση και μετά να πω παρακαλώ λύστε τη...!
eirinI_23 Δημοσ. 1 Ιουνίου 2009 Δημοσ. 1 Ιουνίου 2009 καλημερααα...ουτε εγω ξερω την λυση απο την ασκηση... γιατι να μην την δωσει κανενασ την λυση βρε παιδακια???
Dr.Fuzzy Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 καλημερααα...ουτε εγω ξερω την λυση απο την ασκηση... γιατι να μην την δωσει κανενασ την λυση βρε παιδακια??? Έλα μου ντε...γιατί άραγε;
GrandGamer Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 Σίγουρα αυτή είναι η εκφώνηση της άσκησης και όχι η λύση; συγνώμη αλλά αυτό σου λέει βήμα βήμα τι να κάνεις. Επίσης, σίγουρα είναι εργασία για λειτουργικά; εμένα εργασία για thread μου κάνει.
narbi Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 Σίγουρα αυτή είναι η εκφώνηση της άσκησης και όχι η λύση; συγνώμη αλλά αυτό σου λέει βήμα βήμα τι να κάνεις. Επίσης, σίγουρα είναι εργασία για λειτουργικά; εμένα εργασία για thread μου κάνει. Με threads ειναι η ασκ... Threads, Shared memory και δημιουργία θυγατρικών με fork() στο εργαστηριο των Λειτουργικών τα κάνουμε..
GrandGamer Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 Ναι δεν διαφωνώ, System calls είναι, αλλά εννοώ ότι δεν είναι εργασία για λειτουργικά αλλά για το μάθημα των Λειτουργικών. Άλλο το ένα άλλο το άλλο
narbi Δημοσ. 4 Ιουνίου 2009 Δημοσ. 4 Ιουνίου 2009 Ναι, δεν καταλαβα οτι το θέμα ήταν στη διατύπωση.. Έτσι οπως τα λες ειναι.
narbi Δημοσ. 20 Ιουνίου 2009 Δημοσ. 20 Ιουνίου 2009 Μια λύση για την εν λόγω άκσηση μπορείτε να βρείτε εδώ. Όσοι ενδιαφέρονται ακόμη για να μάθουν μιας κ το εξάμηνο τελείωσε...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.