From 335be7f8c8cc469fe8b9a8f1d938fa5f32b15199 Mon Sep 17 00:00:00 2001 From: polymurph Date: Thu, 16 Sep 2021 21:33:23 +0200 Subject: [PATCH] added posix thread example --- CPP/multithreading/Makefile | 29 ++++++++++++++ CPP/multithreading/main.cpp | 77 ++++++++++++++++++++++++++++++++++++ CPP/multithreading/runtest | Bin 0 -> 25512 bytes 3 files changed, 106 insertions(+) create mode 100644 CPP/multithreading/Makefile create mode 100644 CPP/multithreading/main.cpp create mode 100755 CPP/multithreading/runtest diff --git a/CPP/multithreading/Makefile b/CPP/multithreading/Makefile new file mode 100644 index 0000000..fe7ddc7 --- /dev/null +++ b/CPP/multithreading/Makefile @@ -0,0 +1,29 @@ +cpp_src = $(wildcard *.cpp) +cpp_src += $(wildcard ./utils/*.cpp) +cpp_src += $(wildcard ./driver/*.cpp) + +cpp_obj = $(cpp_src:.cpp=.o) +c_obj = $(c_src:.c=.o) +CC = g++ +CFLAGS = -Wall -pedantic -li2c +LDFLAGS = -lpthread +EXEC = runtest + + +all : $(EXEC) + +$(EXEC): $(cpp_obj) $(c_obj) + $(CC) -o $@ $^ $(LDFLAGS) + +debug : $(EXEC) + +$(EXEC): $(cpp_obj) $(c_obj) + $(CC) -g -o $@ $^ $(LDFLAGS) + +clean: + rm -rf $(c_obj) $(cpp_obj) $(EXEC) + clear + +cleanall: + rm -rf $(c_obj) $(cpp_obj) $(EXEC) + clear diff --git a/CPP/multithreading/main.cpp b/CPP/multithreading/main.cpp new file mode 100644 index 0000000..4fb1da5 --- /dev/null +++ b/CPP/multithreading/main.cpp @@ -0,0 +1,77 @@ +#include + +#include +#include +#include +#include +#include + +pthread_mutex_t print_mtx; + +class IThread +{ + public: + + private: + + virtual void* _run() = 0; + + static void* _staticRun(void* context) + { + return static_cast(context)->_run(); + } +}; + + + +void printer(std::string a) +{ + pthread_mutex_lock(&print_mtx); + + std::cout << a << std::endl; + + pthread_mutex_unlock(&print_mtx); +} + +void* foo(void* arg) +{ + unsigned int i = 100; + for(;i > 0; i--){ + std::string a = "foo cnt: "; + a += std::to_string(i); + printer(a); + sleep(1); + } + +} + +void* baa(void* arg) +{ + unsigned int i = 5; + + for(;i > 0; i--){ + std::string a = "baa cnt: "; + a += std::to_string(i); + printer(a); + sleep(10); + } +} + +int main() +{ + pthread_t foo_th, baa_th; + + + pthread_mutex_init(&print_mtx, NULL); + + pthread_create(&foo_th, NULL, foo, NULL); + pthread_create(&baa_th, NULL, baa, NULL); + + + pthread_join(foo_th, NULL); + pthread_join(baa_th, NULL); + + + return 0; +} + diff --git a/CPP/multithreading/runtest b/CPP/multithreading/runtest new file mode 100755 index 0000000000000000000000000000000000000000..4ca906822296ab086df1fa5533ea49c4f6ca4702 GIT binary patch literal 25512 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 Dcj^Lr literal 0 HcmV?d00001