From d0eb9ef1931b94e8f78c0fbd2806c4da70aeb881 Mon Sep 17 00:00:00 2001 From: AfonsoCMSousa Date: Tue, 18 Mar 2025 19:11:54 +0000 Subject: [PATCH] Enhance thread management and build script - Added check for thread worker in thread_master_init to provide informative error message. - Updated main function to properly assign jobs to the thread worker. - Modified build script to create a bin directory if it doesn't exist. --- bin/example | Bin 34696 -> 34648 bytes build.sh | 1 + example | Bin 56856 -> 34648 bytes include/threadlib/threadlib.c | 11 ++++++++++- src/main.c | 12 +++++++++++- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bin/example b/bin/example index 0d419c7c7d23494a7a37c96af09b489340becf6c..43cac620c1b5d4e3d218ec9342d0b87696a89fe6 100755 GIT binary patch delta 2029 zcmZuyeQZ-z6u{w zb?pX}rd!E1N`l7j4@CV#hYP`|NjF(m3=(II0W|^=C9jDj#b7d*#reDUl@ARsx#!+< z&hLEOb547Y4~f?X#n@DSypj-s5OO*j1Yf-JQ_-ajx{x?&g;19t&Pa=OPPECJiU`uEacIp zQjs*(Pe{?pZ3WbASZOMJY3sS`ZLU*iW@J;s_VoL-+fXf*ucMzD8q6QS0drJ>#R80t znx&y~8d$f!-UT)hKPnLIP25L~cy2~=LgNdyv$|SKx(zTPYSJ^! z_lRd&4Nb_qE*gtB(Y&gKy#@vhd(v=_PBI9*ZciuJWh%zPliGzWM09U363xV2cBK)- zIyX0`y$g&Q;e0;hqYrtJ@jc*?$)vJk(prGFR4pw#4mLDRjQv&~ zUdo=&)YWRVG67A+m{x@?ff5sK1wB{gE_>>K2B&lG8ywROE+eRJ@C995-Pm-5B@vcZ zsn|k_9UCzY*!5_p2ga*ljEvn3oGDmJLRj3m04CZzT#FYvM~zB%=|uIiwO?+5dhhn% z)bU%ADolk{bV54Ih4m2r3gIO+ntPr}!m0_%6I-aoQ7rD?LKTN~_gTb3$RTuzc~(Q+ zDl%KFXD0KCvpNjxFfU-KLaqch(yelvh~KMm;bWRi-*YT6UENHGQ!qv+bhn?;D~=-J z9h!1jR`)`M{Qt=0j~o}N5oJG@dLX@t3nVcS(`qEQaWh?0V_)QgGBQ7u5*(L|17^5P zm{y=TG3u}J_I~4mvVIo#{0b*Fm-QGe={y+tM!w2N>=;U-gq0U?{M-!>+BH5q^|+IC zLWg=$^s6{(HM6YfO29)Q`@UECI*oY8q3G zx$**_kBJ+nN$HpzU8zx-h&Z(Rltn+Z*UD)OXIK#RbzZ_ z^Z8Id1kY}$Wka9z%;JJ1;+e%5ybTRg3lYBzp@u4i^`V)(r%nm#TOKWd}2=)sO) z{8G>BaLeOx4LWWcaFf#AjmSS`)8TjMde@U;MHcKo zbn!Mj%j_IgSaDI#WsD0=n08&9vnL^%vwzL$Wlpbf`Yos5ar!-{KX7`L(;r1l;hgz@JL%tj&g>Yoh__N_aHSYOKz+f+()fXx z5Es0%S5AuoF(!_&2>AZO9rDo8l>z--oE7M;;BxComCmx4$Owo#!=uBTpIS#tL$&PP zdM&hikL=LVlNqfauNAA!PZ_@4sq^3d+wY+J9I7_yERAs=`Ph?Pgm1l%l!fYc%TY=JV9(C zR~xCOYHgmzYBxJKLS>l#c{3|KwJMSY)-tP&sJ;;$jx*~~20dL@l)XosDq9hML59!okk{=mp!ts} z;SLPE%8e~c$kGIk?@0@uUaRE+BL-^M*K;;JixJh5o)-kikBVQ&He z$TjeRo6+7!AO&yt2@hzxtacths)y3(nTE2qLvl~oEIVxyW^FUjVHei(o_K$~f_tMw zD--rv{}LKxrhf^~oDU0sh$(2$>f#nU-LP?BdJCi;3{9?s8N_V#1^8muj$*6hZ%Fw0 zC*i)8xK`k1w0D6};w2J(;7RZ+5?;*10>@mnzB>;Hk zJ)C!NKC0hFC73`dm%`Kbt{cg+Z7O5QvX=#YMbH*OUl+7h&^AFk1nm@byPD74-V{QY zpxuJ*q?5XbZtJC#;Vq^L?=Jewdv$~SH7-P2epcRa!Y?^vKHU7fM&C7FTxAdCfX4|< zIJJT5iE1s|mhFHXz&DD|M!BIQS;{{2gF^!+uT=Hz-@QA?x(~~ntCencna59O=Rzt= zW3eE}d@o4iAa$Jx7LFc-ZB*FC`ndWi$oLVEvBMNU(U3XLJtli;!(h1@IzSzRZR1=s+Yua~k|0?5I7dN%Ck ze;7N$RlCOA(mInuCp=P~OUdI6Qhu0{$6k_h79#QJ)v0XjQu1UfTTMz1)zSU%J>?-y a4Q)}JqzpGG&I$MMBSjNaqsk8|74|>4Wdm;j diff --git a/build.sh b/build.sh index af47bf7..1a1708c 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,6 @@ # This script builds the project mkdir -p build +mkdir -p bin cd ./build cmake .. make diff --git a/example b/example index e2276759b8a817d005d4189794106dfdf8dc4479..43cac620c1b5d4e3d218ec9342d0b87696a89fe6 100755 GIT binary patch literal 34648 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

F2q1|&0g4^4czj04mGslaPK!d8lm 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, param->custom_params); + if (param->__thread_worker__ == NULL) + { + fprintf(stderr, "Thread Master - Info: No task given, use \"thread_master_assign_new_job\" to run a task\n"); + } + else + { + thread_master_assign_new_job(param->__thread_worker__, param->custom_params); + } + return NULL; } @@ -84,6 +92,7 @@ void thread_master_init(int max_threads, void *(*__thread_worker__)(void *), voi fprintf(stderr, "Thread Master - Error: Failed to create thread master.\n"); exit(EXIT_FAILURE); } + isThreadMasterRunning = 1; pthread_detach(thread_master); diff --git a/src/main.c b/src/main.c index 5b8ed9b..3b88ee5 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,8 @@ void *thread_worker(void *params) return NULL; } + sleep_ms(100); + custom->a += 10; printf("Thread %d - WE ARE RUNNING THIS TASK\n", param->thread_id); @@ -33,9 +35,17 @@ int main(void) { custom_params_t *custom_params = (custom_params_t *)malloc(sizeof(custom_params_t)); custom_params->a = 0; - thread_master_init(MAX_THREAD, thread_worker, NULL); + thread_master_init(MAX_THREAD, NULL, custom_params); + + sleep_ms(1000); + + thread_master_assign_new_job(thread_worker, custom_params); + thread_master_assign_new_job(thread_worker, custom_params); + thread_master_assign_new_job(thread_worker, custom_params); thread_master_free(); printf("Custom Params: %d\n", custom_params->a); + + free(custom_params); return 0; } \ No newline at end of file