From 08a0ee0f1a0e65fded7367ed2446f499f0d343f7 Mon Sep 17 00:00:00 2001 From: Hammy Date: Tue, 21 Dec 2021 20:27:54 +0000 Subject: [PATCH] Upload Lab Files & Experiment With Threading --- CMakeLists.txt | 3 ++ Further pthread practice Qs/1.c | 38 +++++++++++++++ Further pthread practice Qs/3.c | 44 ++++++++++++++++++ Further pthread practice Qs/5.c | 8 ++++ .../further_pthread_practice.pdf | Bin 0 -> 63184 bytes src/test/test.c | 32 +++++++++++-- 6 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 Further pthread practice Qs/1.c create mode 100644 Further pthread practice Qs/3.c create mode 100644 Further pthread practice Qs/5.c create mode 100644 Further pthread practice Qs/further_pthread_practice.pdf diff --git a/CMakeLists.txt b/CMakeLists.txt index 596caf2..5b57597 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,11 @@ cmake_minimum_required(VERSION 3.22) project(C_Dynamic_List C) set(CMAKE_C_STANDARD 11) +set(CMAKE_C_FLAGS "-pthread") include_directories(.) include_directories(src/test) add_executable(C_Dynamic_List src/list.c src/test/test.c src/list.h) + +add_executable(1 "Further pthread practice Qs/1.c") \ No newline at end of file diff --git a/Further pthread practice Qs/1.c b/Further pthread practice Qs/1.c new file mode 100644 index 0000000..2abb934 --- /dev/null +++ b/Further pthread practice Qs/1.c @@ -0,0 +1,38 @@ +#include +#include +#include + +#define NUM_THREADS 20 + +void *fizzbuzz(void *arg) { + int *number = (int *) arg; + if (*number % 3 == 0) { + printf("%d -> %s\n", *number, "fizz"); + } else if (*number % 5 == 0) { + printf("%d -> %s\n", *number, "buzz"); + } else { + printf("%d -> %s\n", *number, "no div"); + } + + pthread_exit(NULL); +} + +int main() { + + pthread_t threads[20]; + int nums[20]; + + int i; + for (i = 0; i < NUM_THREADS; i++) { + nums[i] = i + 1; + pthread_create(&threads[i], NULL, fizzbuzz, &nums[i]); + } + + for (i = 0; i < NUM_THREADS; i++) { + char *returnedStr; + pthread_join(threads[i], (void **) &returnedStr); + } + + pthread_exit(NULL); + +} diff --git a/Further pthread practice Qs/3.c b/Further pthread practice Qs/3.c new file mode 100644 index 0000000..527a922 --- /dev/null +++ b/Further pthread practice Qs/3.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include // gives us sleep(). Replace with windows.h for compiling on windows! + +#define NUM_THREADS 20 + +typedef struct _threadinfo { + bool * keepRunning; + int * total; +} threadinfo_t; + +void * getInput(void * arg) { + threadinfo_t * args = (threadinfo_t *) arg; + + int currInput; + printf("Input as much as you can --- you have 10 seconds!\n"); + while (*args->keepRunning) { + printf("Add another number! : "); + scanf("%d", &currInput); + *args->total += currInput; + } + pthread_exit(NULL); +} + +int main() { + + pthread_t thread; + bool keepRunning = true; + int total = 0; + threadinfo_t args = {&keepRunning, &total}; + + pthread_create(&thread, NULL, getInput, &args); + + sleep(10); // sleep for 10 secs + keepRunning = false; + pthread_join(thread, NULL); + printf("\n\nYou managed to enter a total of: %d!\n", total); + + pthread_exit(NULL); + +} + diff --git a/Further pthread practice Qs/5.c b/Further pthread practice Qs/5.c new file mode 100644 index 0000000..f7cdef3 --- /dev/null +++ b/Further pthread practice Qs/5.c @@ -0,0 +1,8 @@ +#include + +// the rest is up to you! Implement a program which starts _two_ pthreads. +// One reads input from the user, and adds numbers to a total. +// the other prints the current total value every 3 seconds. +// After 30 seconds, the main thread sets a bool to false that signals +// to both threads that they should join, just like in 3.c. +// You can use sleep(int seconds) from unistd.h to make your threads sleep. \ No newline at end of file diff --git a/Further pthread practice Qs/further_pthread_practice.pdf b/Further pthread practice Qs/further_pthread_practice.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2962c7cc7291715521c148af7396c3b7e7b2bfbc GIT binary patch literal 63184 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 literal 0 HcmV?d00001 diff --git a/src/test/test.c b/src/test/test.c index fa043f1..1195c9b 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1,4 +1,5 @@ #include "src/list.h" +#include "pthread.h" #include "string.h" #include "assert.h" @@ -63,10 +64,35 @@ void shouldReturnSortedList() { printSuccess(__func__); } +typedef struct args { + List *list; + int elemToInsert; +} Arguments; + +void *append(void *arg) { + Arguments *args = (Arguments *) arg; + List *list = args->list; + List_append(list, args->elemToInsert); + pthread_exit(NULL); +} + int main() { - shouldReturnListLengthZero(); - shouldReturnListLengthTwo(); - shouldReturnSortedList(); +// shouldReturnListLengthZero(); +// shouldReturnListLengthTwo(); +// shouldReturnSortedList(); + List *list = newList(); + + pthread_t pthreads[5]; + for (int i = 0; i < 5; i++) { + Arguments args = {list, i}; + pthread_create(&pthreads[i], NULL, append, &args); + } + + for (int i = 0; i < 5; i++) { + List_print(list); + pthread_join(pthreads[i], NULL); + } + return 0; }