












Να κατασκευασετε ενα προγραμμα το οποιο θα εκτελει γραμμικη αναζητηση για ενα αριθμο σε ενα πινακα 50 αριθμων.Ο αριθμος που αναζητειται θα δινεται απο τη γραμμη εντολης.Το γονικο νημα θα τοποθετει τον πινακα στη μνημη διαβαζοντας τον απ ενα αρχειο.Στη συνεχεια θα δημιουργει 5 νηματα δινοντας σε καθε νημα απο μια δεκαδα του πινακα,προκειμενου το καθε νημα να εκτελει γραμμικη αναζητηση στο δικο του κομματι στο πινακα.Καθε νημα θα τυπωνει ποσα στοιχεια εχουν ελενχθει συνολικα ως εκεινη τη στιγμη ,τυπωνοντας στην οθονη την τιμη μιας αντιστοιχης καθολικης μεταβλητης.Στο τελος θα τυπωνει στην οθονη τη θεση του στοιχειου στον πινακα ή μηνυμα οτι δεν βρεθηκε το στοιχειο.Επισης θα πρεπει να δοθει προσοχη στο γεγονος οτι πριν την προσπελαση των νηματων στην καθολικη μεταβλητη να γινεται κλειδωμα ωστε να συνχρονιστουν τα νηματα και να μην υπαρξει ασυνεπεια στις τιμες.
παραδειγμα νηματων που περιλαμβανει συνχρονισμο:
- Κώδικας: Επιλογή όλων
#include <pthread.h>
#include <stdio.h>
int a=0;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void *myThread(void *string)
{
int i;
int rc;
int local;
for (i=0; i<30; i++)
{
rc=pthread_mutex_lock(&mutex);
local=a;
sleep(1);
local=local+1;
a=local;
rc=pthread_mutex_unlock(&mutex);
printf("%d:%s\n",i,string);
}
}
int main()
{
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)
exit(-1);
pthread_join(e_th1, NULL);
pthread_join(f_th1, NULL);
pthread_join(e_th2, NULL);
pthread_join(f_th2, NULL);
printf("Main finished. a=%d\n",a);
pthread_exit(NULL);
}