diff options
Diffstat (limited to 'linuxthreads/Examples')
-rw-r--r-- | linuxthreads/Examples/ex1.c | 37 | ||||
-rw-r--r-- | linuxthreads/Examples/ex13.c | 6 | ||||
-rw-r--r-- | linuxthreads/Examples/ex14.c | 2 | ||||
-rw-r--r-- | linuxthreads/Examples/ex2.c | 109 | ||||
-rw-r--r-- | linuxthreads/Examples/ex4.c | 84 | ||||
-rw-r--r-- | linuxthreads/Examples/ex5.c | 82 | ||||
-rw-r--r-- | linuxthreads/Examples/ex7.c | 33 |
7 files changed, 198 insertions, 155 deletions
diff --git a/linuxthreads/Examples/ex1.c b/linuxthreads/Examples/ex1.c index f455ecfaf0..29138cf761 100644 --- a/linuxthreads/Examples/ex1.c +++ b/linuxthreads/Examples/ex1.c @@ -7,29 +7,36 @@ #include <unistd.h> #include "pthread.h" -void * process(void * arg) +static void * +process (void *arg) { int i; - fprintf(stderr, "Starting process %s\n", (char *) arg); - for (i = 0; i < 10000; i++) { - write(1, (char *) arg, 1); - } + fprintf (stderr, "Starting process %s\n", (char *) arg); + for (i = 0; i < 10000; i++) + { + write (1, (char *) arg, 1); + } return NULL; } -int main(void) +int +main (void) { int retcode; pthread_t th_a, th_b; - void * retval; + void *retval; - retcode = pthread_create(&th_a, NULL, process, (void *) "a"); - if (retcode != 0) fprintf(stderr, "create a failed %d\n", retcode); - retcode = pthread_create(&th_b, NULL, process, (void *) "b"); - if (retcode != 0) fprintf(stderr, "create b failed %d\n", retcode); - retcode = pthread_join(th_a, &retval); - if (retcode != 0) fprintf(stderr, "join a failed %d\n", retcode); - retcode = pthread_join(th_b, &retval); - if (retcode != 0) fprintf(stderr, "join b failed %d\n", retcode); + retcode = pthread_create (&th_a, NULL, process, (void *) "a"); + if (retcode != 0) + fprintf (stderr, "create a failed %d\n", retcode); + retcode = pthread_create (&th_b, NULL, process, (void *) "b"); + if (retcode != 0) + fprintf (stderr, "create b failed %d\n", retcode); + retcode = pthread_join (th_a, &retval); + if (retcode != 0) + fprintf (stderr, "join a failed %d\n", retcode); + retcode = pthread_join (th_b, &retval); + if (retcode != 0) + fprintf (stderr, "join b failed %d\n", retcode); return 0; } diff --git a/linuxthreads/Examples/ex13.c b/linuxthreads/Examples/ex13.c index 3a0347993a..af95358297 100644 --- a/linuxthreads/Examples/ex13.c +++ b/linuxthreads/Examples/ex13.c @@ -32,7 +32,7 @@ struct thr_ctrl int retval; }; -void +static void dump_mut (pthread_mutex_t * mut) { int i; @@ -43,7 +43,7 @@ dump_mut (pthread_mutex_t * mut) }; /* Helper, the opposite of pthread_cond_wait (cond, mut). */ -void +static void pthr_cond_signal_mutex (pthread_cond_t * cond, pthread_mutex_t * mut) { int err; @@ -59,7 +59,7 @@ pthr_cond_signal_mutex (pthread_cond_t * cond, pthread_mutex_t * mut) } -void * +static void * thread_start (void *ptr) { struct thr_ctrl *tc = ptr; diff --git a/linuxthreads/Examples/ex14.c b/linuxthreads/Examples/ex14.c index 7788e521b8..406e03f346 100644 --- a/linuxthreads/Examples/ex14.c +++ b/linuxthreads/Examples/ex14.c @@ -92,7 +92,7 @@ worker (void *arg) #define TEST_FUNCTION do_test () #define TIMEOUT 60 -int +static int do_test (void) { pthread_t threads[NTHREADS]; diff --git a/linuxthreads/Examples/ex2.c b/linuxthreads/Examples/ex2.c index 70cb6b3986..f2556a4206 100644 --- a/linuxthreads/Examples/ex2.c +++ b/linuxthreads/Examples/ex2.c @@ -10,61 +10,66 @@ /* Circular buffer of integers. */ -struct prodcons { - int buffer[BUFFER_SIZE]; /* the actual data */ - pthread_mutex_t lock; /* mutex ensuring exclusive access to buffer */ - int readpos, writepos; /* positions for reading and writing */ - pthread_cond_t notempty; /* signaled when buffer is not empty */ - pthread_cond_t notfull; /* signaled when buffer is not full */ +struct prodcons +{ + int buffer[BUFFER_SIZE]; /* the actual data */ + pthread_mutex_t lock; /* mutex ensuring exclusive access to buffer */ + int readpos, writepos; /* positions for reading and writing */ + pthread_cond_t notempty; /* signaled when buffer is not empty */ + pthread_cond_t notfull; /* signaled when buffer is not full */ }; /* Initialize a buffer */ - -void init(struct prodcons * b) +static void +init (struct prodcons *b) { - pthread_mutex_init(&b->lock, NULL); - pthread_cond_init(&b->notempty, NULL); - pthread_cond_init(&b->notfull, NULL); + pthread_mutex_init (&b->lock, NULL); + pthread_cond_init (&b->notempty, NULL); + pthread_cond_init (&b->notfull, NULL); b->readpos = 0; b->writepos = 0; } /* Store an integer in the buffer */ - -void put(struct prodcons * b, int data) +static void +put (struct prodcons *b, int data) { - pthread_mutex_lock(&b->lock); + pthread_mutex_lock (&b->lock); /* Wait until buffer is not full */ - while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) { - pthread_cond_wait(&b->notfull, &b->lock); - /* pthread_cond_wait reacquired b->lock before returning */ - } + while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) + { + pthread_cond_wait (&b->notfull, &b->lock); + /* pthread_cond_wait reacquired b->lock before returning */ + } /* Write the data and advance write pointer */ b->buffer[b->writepos] = data; b->writepos++; - if (b->writepos >= BUFFER_SIZE) b->writepos = 0; + if (b->writepos >= BUFFER_SIZE) + b->writepos = 0; /* Signal that the buffer is now not empty */ - pthread_cond_signal(&b->notempty); - pthread_mutex_unlock(&b->lock); + pthread_cond_signal (&b->notempty); + pthread_mutex_unlock (&b->lock); } /* Read and remove an integer from the buffer */ - -int get(struct prodcons * b) +static int +get (struct prodcons *b) { int data; - pthread_mutex_lock(&b->lock); + pthread_mutex_lock (&b->lock); /* Wait until buffer is not empty */ - while (b->writepos == b->readpos) { - pthread_cond_wait(&b->notempty, &b->lock); - } + while (b->writepos == b->readpos) + { + pthread_cond_wait (&b->notempty, &b->lock); + } /* Read the data and advance read pointer */ data = b->buffer[b->readpos]; b->readpos++; - if (b->readpos >= BUFFER_SIZE) b->readpos = 0; + if (b->readpos >= BUFFER_SIZE) + b->readpos = 0; /* Signal that the buffer is now not full */ - pthread_cond_signal(&b->notfull); - pthread_mutex_unlock(&b->lock); + pthread_cond_signal (&b->notfull); + pthread_mutex_unlock (&b->lock); return data; } @@ -75,39 +80,45 @@ int get(struct prodcons * b) struct prodcons buffer; -void * producer(void * data) +static void * +producer (void *data) { int n; - for (n = 0; n < 10000; n++) { - printf("%d --->\n", n); - put(&buffer, n); - } - put(&buffer, OVER); + for (n = 0; n < 10000; n++) + { + printf ("%d --->\n", n); + put (&buffer, n); + } + put (&buffer, OVER); return NULL; } -void * consumer(void * data) +static void * +consumer (void *data) { int d; - while (1) { - d = get(&buffer); - if (d == OVER) break; - printf("---> %d\n", d); - } + while (1) + { + d = get (&buffer); + if (d == OVER) + break; + printf ("---> %d\n", d); + } return NULL; } -int main(void) +int +main (void) { pthread_t th_a, th_b; - void * retval; + void *retval; - init(&buffer); + init (&buffer); /* Create the threads */ - pthread_create(&th_a, NULL, producer, 0); - pthread_create(&th_b, NULL, consumer, 0); + pthread_create (&th_a, NULL, producer, 0); + pthread_create (&th_b, NULL, consumer, 0); /* Wait until producer and consumer finish. */ - pthread_join(th_a, &retval); - pthread_join(th_b, &retval); + pthread_join (th_a, &retval); + pthread_join (th_b, &retval); return 0; } diff --git a/linuxthreads/Examples/ex4.c b/linuxthreads/Examples/ex4.c index 86584de70d..5c8b929e22 100644 --- a/linuxthreads/Examples/ex4.c +++ b/linuxthreads/Examples/ex4.c @@ -14,10 +14,11 @@ #if 0 -char * str_accumulate(char * s) +char * +str_accumulate (char *s) { static char accu[1024] = { 0 }; - strcat(accu, s); + strcat (accu, s); return accu; } @@ -35,73 +36,80 @@ static pthread_key_t str_key; static pthread_once_t str_alloc_key_once = PTHREAD_ONCE_INIT; /* Forward functions */ -static void str_alloc_key(void); -static void str_alloc_destroy_accu(void * accu); +static void str_alloc_key (void); +static void str_alloc_destroy_accu (void *accu); /* Thread-safe version of str_accumulate */ -char * str_accumulate(const char * s) +static char * +str_accumulate (const char *s) { - char * accu; + char *accu; /* Make sure the key is allocated */ - pthread_once(&str_alloc_key_once, str_alloc_key); + pthread_once (&str_alloc_key_once, str_alloc_key); /* Get the thread-specific data associated with the key */ - accu = (char *) pthread_getspecific(str_key); + accu = (char *) pthread_getspecific (str_key); /* It's initially NULL, meaning that we must allocate the buffer first. */ - if (accu == NULL) { - accu = malloc(1024); - if (accu == NULL) return NULL; - accu[0] = 0; - /* Store the buffer pointer in the thread-specific data. */ - pthread_setspecific(str_key, (void *) accu); - printf("Thread %lx: allocating buffer at %p\n", pthread_self(), accu); - } + if (accu == NULL) + { + accu = malloc (1024); + if (accu == NULL) + return NULL; + accu[0] = 0; + /* Store the buffer pointer in the thread-specific data. */ + pthread_setspecific (str_key, (void *) accu); + printf ("Thread %lx: allocating buffer at %p\n", pthread_self (), accu); + } /* Now we can use accu just as in the non thread-safe code. */ - strcat(accu, s); + strcat (accu, s); return accu; } /* Function to allocate the key for str_alloc thread-specific data. */ -static void str_alloc_key(void) +static void +str_alloc_key (void) { - pthread_key_create(&str_key, str_alloc_destroy_accu); - printf("Thread %lx: allocated key %d\n", pthread_self(), str_key); + pthread_key_create (&str_key, str_alloc_destroy_accu); + printf ("Thread %lx: allocated key %d\n", pthread_self (), str_key); } /* Function to free the buffer when the thread exits. */ /* Called only when the thread-specific data is not NULL. */ -static void str_alloc_destroy_accu(void * accu) +static void +str_alloc_destroy_accu (void *accu) { - printf("Thread %lx: freeing buffer at %p\n", pthread_self(), accu); - free(accu); + printf ("Thread %lx: freeing buffer at %p\n", pthread_self (), accu); + free (accu); } /* Test program */ -void * process(void * arg) +static void * +process (void *arg) { - char * res; - res = str_accumulate("Result of "); - res = str_accumulate((char *) arg); - res = str_accumulate(" thread"); - printf("Thread %lx: \"%s\"\n", pthread_self(), res); + char *res; + res = str_accumulate ("Result of "); + res = str_accumulate ((char *) arg); + res = str_accumulate (" thread"); + printf ("Thread %lx: \"%s\"\n", pthread_self (), res); return NULL; } -int main(int argc, char ** argv) +int +main (int argc, char **argv) { - char * res; + char *res; pthread_t th1, th2; - res = str_accumulate("Result of "); - pthread_create(&th1, NULL, process, (void *) "first"); - pthread_create(&th2, NULL, process, (void *) "second"); - res = str_accumulate("initial thread"); - printf("Thread %lx: \"%s\"\n", pthread_self(), res); - pthread_join(th1, NULL); - pthread_join(th2, NULL); + res = str_accumulate ("Result of "); + pthread_create (&th1, NULL, process, (void *) "first"); + pthread_create (&th2, NULL, process, (void *) "second"); + res = str_accumulate ("initial thread"); + printf ("Thread %lx: \"%s\"\n", pthread_self (), res); + pthread_join (th1, NULL); + pthread_join (th2, NULL); return 0; } diff --git a/linuxthreads/Examples/ex5.c b/linuxthreads/Examples/ex5.c index 475de0e0c5..d39d487603 100644 --- a/linuxthreads/Examples/ex5.c +++ b/linuxthreads/Examples/ex5.c @@ -10,50 +10,56 @@ /* Circular buffer of integers. */ -struct prodcons { - int buffer[BUFFER_SIZE]; /* the actual data */ - int readpos, writepos; /* positions for reading and writing */ - sem_t sem_read; /* number of elements available for reading */ - sem_t sem_write; /* number of locations available for writing */ +struct prodcons +{ + int buffer[BUFFER_SIZE]; /* the actual data */ + int readpos, writepos; /* positions for reading and writing */ + sem_t sem_read; /* number of elements available for reading */ + sem_t sem_write; /* number of locations available for writing */ }; /* Initialize a buffer */ -void init(struct prodcons * b) +static void +init (struct prodcons *b) { - sem_init(&b->sem_write, 0, BUFFER_SIZE - 1); - sem_init(&b->sem_read, 0, 0); + sem_init (&b->sem_write, 0, BUFFER_SIZE - 1); + sem_init (&b->sem_read, 0, 0); b->readpos = 0; b->writepos = 0; } /* Store an integer in the buffer */ -void put(struct prodcons * b, int data) +static void +put (struct prodcons *b, int data) { /* Wait until buffer is not full */ - sem_wait(&b->sem_write); + sem_wait (&b->sem_write); /* Write the data and advance write pointer */ b->buffer[b->writepos] = data; b->writepos++; - if (b->writepos >= BUFFER_SIZE) b->writepos = 0; + if (b->writepos >= BUFFER_SIZE) + b->writepos = 0; /* Signal that the buffer contains one more element for reading */ - sem_post(&b->sem_read); + sem_post (&b->sem_read); } /* Read and remove an integer from the buffer */ -int get(struct prodcons * b) +static int +get (struct prodcons *b) { int data; /* Wait until buffer is not empty */ - sem_wait(&b->sem_read); + sem_wait (&b->sem_read); /* Read the data and advance read pointer */ data = b->buffer[b->readpos]; b->readpos++; - if (b->readpos >= BUFFER_SIZE) b->readpos = 0; + if (b->readpos >= BUFFER_SIZE) + b->readpos = 0; /* Signal that the buffer has now one more location for writing */ - sem_post(&b->sem_write); + sem_post (&b->sem_write); return data; } @@ -64,39 +70,45 @@ int get(struct prodcons * b) struct prodcons buffer; -void * producer(void * data) +static void * +producer (void *data) { int n; - for (n = 0; n < 10000; n++) { - printf("%d --->\n", n); - put(&buffer, n); - } - put(&buffer, OVER); + for (n = 0; n < 10000; n++) + { + printf ("%d --->\n", n); + put (&buffer, n); + } + put (&buffer, OVER); return NULL; } -void * consumer(void * data) +static void * +consumer (void *data) { int d; - while (1) { - d = get(&buffer); - if (d == OVER) break; - printf("---> %d\n", d); - } + while (1) + { + d = get (&buffer); + if (d == OVER) + break; + printf ("---> %d\n", d); + } return NULL; } -int main(void) +int +main (void) { pthread_t th_a, th_b; - void * retval; + void *retval; - init(&buffer); + init (&buffer); /* Create the threads */ - pthread_create(&th_a, NULL, producer, 0); - pthread_create(&th_b, NULL, consumer, 0); + pthread_create (&th_a, NULL, producer, 0); + pthread_create (&th_b, NULL, consumer, 0); /* Wait until producer and consumer finish. */ - pthread_join(th_a, &retval); - pthread_join(th_b, &retval); + pthread_join (th_a, &retval); + pthread_join (th_b, &retval); return 0; } diff --git a/linuxthreads/Examples/ex7.c b/linuxthreads/Examples/ex7.c index 94b708b56b..d9db33c5cd 100644 --- a/linuxthreads/Examples/ex7.c +++ b/linuxthreads/Examples/ex7.c @@ -9,32 +9,37 @@ #include <stdlib.h> #include <pthread.h> -#define NTHREADS 20 /* number of threads */ +#define NTHREADS 20 /* number of threads */ -static void *thread(void *arg) +static void * +thread (void *arg) { - printf("thread terminating\n"); + printf ("thread terminating\n"); return 0; } -void cleanup(void) +static void +cleanup (void) { - printf("atexit handler called\n"); + printf ("atexit handler called\n"); } -int main(void) +int +main (void) { int i; - atexit(cleanup); + atexit (cleanup); - for (i = 0; i < NTHREADS; i++) { - pthread_t id; - if (pthread_create(&id, 0, thread, 0) != 0) { - fprintf(stderr, "pthread_create failed\n"); - abort(); + for (i = 0; i < NTHREADS; i++) + { + pthread_t id; + if (pthread_create (&id, 0, thread, 0) != 0) + { + fprintf (stderr, "pthread_create failed\n"); + abort (); + } } - } - pthread_exit(0); + pthread_exit (0); } |