From 0fc6c7499693d1a0251fe1ec19560d0c0acd7d67 Mon Sep 17 00:00:00 2001 From: hello Date: Sun, 9 Feb 2025 03:33:42 +0530 Subject: [PATCH] extended code to advanced input functionality --- OS/C/theory/sync/semaextraposts.c | 31 ++++++++++++++++----------- OS/C/theory/sync/semexpos | Bin 0 -> 50248 bytes OS/C/theory/sync/withoutsemaphores.c | 4 ++-- OS/C/theory/sync/withsema.c | 19 ++++++++-------- OS/C/theory/sync/withsema4.c | 7 +++--- OS/C/theory/sync/wosema | Bin 33624 -> 33624 bytes OS/C/theory/sync/wsem | Bin 33880 -> 33976 bytes OS/C/theory/sync/wsem4 | Bin 33960 -> 33960 bytes 8 files changed, 34 insertions(+), 27 deletions(-) create mode 100755 OS/C/theory/sync/semexpos diff --git a/OS/C/theory/sync/semaextraposts.c b/OS/C/theory/sync/semaextraposts.c index 5196b8e..b171bdf 100644 --- a/OS/C/theory/sync/semaextraposts.c +++ b/OS/C/theory/sync/semaextraposts.c @@ -1,23 +1,28 @@ #include #include #include -#include +#include +#include -sem_t my_semaphore; +atomic_int semaphore_value = 5; +sem_t *my_semaphore; int main(){ - sem_init(&my_semaphore, 0, 5); - int sem_val; - sem_getvalue(&my_semaphore, &sem_val); + my_semaphore = sem_open("/my_sem", O_CREAT, 0644, atomic_load(&semaphore_value)); + int sem_val = atomic_load(&semaphore_value); + printf("Initial semaphore value: %d\n", sem_val); + + sem_post(my_semaphore); + atomic_fetch_add(&semaphore_value, 1); + sem_post(my_semaphore); + atomic_fetch_add(&semaphore_value, 1); + sem_post(my_semaphore); + atomic_fetch_add(&semaphore_value, 1); + + sem_val = atomic_load(&semaphore_value); printf("Semaphore value after extra posts: %d\n", sem_val); - sem_post(&my_semaphore); - sem_post(&my_semaphore); - sem_post(&my_semaphore); - - sem_getvalue(&my_semaphore, &sem_val); - printf("Semaphore value after extra posts: %d\n", sem_val); - - sem_destroy(&my_semaphore); + sem_close(my_semaphore); + sem_unlink("/my_sem"); return 0; } diff --git a/OS/C/theory/sync/semexpos b/OS/C/theory/sync/semexpos new file mode 100755 index 0000000000000000000000000000000000000000..361e6562718f032a1aef231e665fb68c0d30fcf4 GIT binary patch literal 50248 zcmeI*TWnNC7zgk9eNkbp{Iu~ga!rJK)TzZq< zSNhCSHn}5ieU3lxmoNQ$;{54nN1qz)(R~JdzJNbHl9|s=&$Ed=y?|QYQ@R*G!*po+ zdsz zcly~KvzIF;a>{;fKURR6CzGF9iLLVw{Knp3Q~7 zcL`OV)9-N=9YY!23+<=AEgVsO^PZna`|>pEPd`bGmY>eWcUNM>?8T*!D$mcqK)LnA zJd6SX2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00jQCz}X0EY@ z_m=1{q#T=**;KWeqLV`Twy;gaZ z-U01)Sm+FvBE6qw>Q6HDr<(eCdcWM)Cc~;v)c8FSkK5~{zB||w2&v9pZf{h5*7-!! zBvC(h(CKcDs39l4;~sK5gMn})tS{sDWM><{26M}=rt&+nE^4{*`{`U<+UMv8zgL?> z@5MT(8iil^HHssqk2+$UkKTNZ>F+Q*V#cDFHjEDlKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##9*V%f{h!|tQbtln2QXC zJpM?tkYUv)w|N6$RqqCZs$cH~1L26?i~7AD|4#imMT!O7qrAc@F7FjKaUe#4#qIHn zDQ%q29c&4NRFP*BF`ltXUyD>*)osy;DqB={lNu7)J~4A-rQGHAMpaS9X(^#rIDM|- z(E5CiN41#dE9eZ=pUv?^A?z_dF6EexFO2v(>e4!1s+CImG{?0WaYIJjm=W73W_$h$ z`dVS9dap63koP#Q^s$cgnR!N~jPw7m8@c^WPA}olpzWm3I-SP&LKI=49a^-Ta??B? zk;@bzF3fjYM2;Sg_o<|xQ|Q9fR{B+luIjHkubrrE|JYNq@p$PkJ-3#Hj=kI(xU}Wi z&0WVnbw%IZ|IXQlz{R2FUfb6L13N8i8z$V{cW&RF&g-ANT79tW?eXTzI*!+sMxMD` zmU`}2YVjtn;V$Fp}p(P57(@D&Cz{sa{i$&Ui#_BO9h{uf6)Bn rJwI@~@BPvliL1XY`@s`@<4pf6TVKE1va;@a{;Um)^D5dSbftd-P62Iu literal 0 HcmV?d00001 diff --git a/OS/C/theory/sync/withoutsemaphores.c b/OS/C/theory/sync/withoutsemaphores.c index 673c910..8b56760 100644 --- a/OS/C/theory/sync/withoutsemaphores.c +++ b/OS/C/theory/sync/withoutsemaphores.c @@ -4,8 +4,8 @@ int counter = 0; void* increment(void* arg) { - for (int i = 0; i < 100000; i++) { - counter++; + for (int i = 0; i < 1000000; i++) { + counter++; // No synchronization, will lead to race condition } return NULL; } diff --git a/OS/C/theory/sync/withsema.c b/OS/C/theory/sync/withsema.c index 1b3c4dc..8c1c54b 100644 --- a/OS/C/theory/sync/withsema.c +++ b/OS/C/theory/sync/withsema.c @@ -1,32 +1,33 @@ +#include #include #include #include -#include +#include -int counter = 0; // shared resource -sem_t semaphore; // semaphore declaration +atomic_int counter = 0; // shared resource +dispatch_semaphore_t semaphore; // semaphore declaration void* increment(void* arg) { for (int i = 0; i < 100000; i++) { - sem_wait(&semaphore); // lock - counter++; // critical section - sem_post(&semaphore); // unlock + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); // lock + atomic_fetch_add(&counter, 1); // critical section + dispatch_semaphore_signal(semaphore); // unlock } return NULL; } int main() { pthread_t t1, t2; - sem_init(&semaphore, 0, 1); // initialize semaphore with value 1 + semaphore = dispatch_semaphore_create(1); // initialize semaphore with value 1 pthread_create(&t1, NULL, increment, NULL); pthread_create(&t2, NULL, increment, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); - sem_destroy(&semaphore); + dispatch_release(semaphore); - printf("Final Counter Value (with semaphores): %d\n", counter); + printf("Final Counter Value (with semaphores): %d\n", atomic_load(&counter)); return 0; } diff --git a/OS/C/theory/sync/withsema4.c b/OS/C/theory/sync/withsema4.c index cd86817..49595b4 100644 --- a/OS/C/theory/sync/withsema4.c +++ b/OS/C/theory/sync/withsema4.c @@ -2,14 +2,15 @@ #include #include #include +#include -int counter = 0; // shared resource +atomic_int counter = 0; // shared resource sem_t *semaphore; // semaphore declaration void* increment(void* arg) { for (int i = 0; i < 100000; i++) { sem_wait(semaphore); // lock - counter++; // critical section + atomic_fetch_add(&counter, 1); // critical section sem_post(semaphore); // unlock } return NULL; @@ -37,7 +38,7 @@ int main() { sem_close(semaphore); sem_unlink("/mysem"); - printf("Final Counter Value (with semaphores): %d\n", counter); + printf("Final Counter Value (with semaphores): %d\n", atomic_load(&counter)); return 0; } diff --git a/OS/C/theory/sync/wosema b/OS/C/theory/sync/wosema index d00b7283e8206f34328b5960ef58702a47059cec..333aa5533718d3ff7c944b5b691c34cd0c928789 100755 GIT binary patch delta 116 zcmV-)0E_?Fh631z0akh3TRNje2ch*IeRvvxkcLm&#` zhyQQFCDkSo4mvUcaitQ;4hw7Os$3*%0e1JqHDQxefnEkaW~2zP)f+ WHSP42ivkQ9nynB^DI*}0vx240tT46! delta 116 zcmV-)0E_?Fh631z0LWgc!yCaiRfOZ!Xk$FBsVRj$_gcxy?vx241A~UrB diff --git a/OS/C/theory/sync/wsem b/OS/C/theory/sync/wsem index 2473cdb1df61ecb067d8869e15aa3548b56db5ca..c25a95ae54e06cde81e20723e40e55fb3bbc3958 100755 GIT binary patch delta 1044 zcmcIiUr3Wt6hGg-DJ#us6BWdo8vbd8k`F4Teko!`QS(X2+~zh?FdN%KXolY$#DX67 z?fRflFiOY?fuhjXOVSqflDH6)3Uo7JBM_1P>?77X*O8d`+JWD>_jk{^=bU@)S#?T$ z4Javil09srnhysMx z4v>j!*C@bS@|bN%Q{pa5P%FqbTaj%@`@Obxz4pib`RR_%+5tPMkk&EXL?^vk)`d4^ zc(W2gBhyG!iV&159RTCZTv)nQN8*iV+M*Ju#foz)0A^&xAVgUZf#F03c=t7cu_()l zmB4q#6yT33IR9z%yTpLd!NhzqIryn>D^WKoMmCele005Z zL(YjFJ%p$os~HPZ&T8u8d&JQbFQ=s|I8lb>O|d899=0cr&rc=9@@0uN=TxA`=MCKO zxtnvda?rM};`|9)n>XnoCCyKm;M|*L7dKLd-`b6EBZ7!!#5dYe6pf+ZV$xaleHycI zz^Jnr_nlabw{)hy+h(IiZ#L?zhnp<@HwSeChu#{}^;A{PFX5*Q7X(u8zAq`>nM zU?FHj^?4Y%lSFxr4cf+u%6@j_?;v73K#pJA-Gmk6zMArMoDM$48<68UHSNk3)cbkg z0gi+7kNwdBKAGZ2_X5t7u-);$TSQEJIe9sHKHZ^IN+6SjrDau&0ZXC64B;=pYUF9} z&#{u>EN!GculV5wkCxZNv&}C_)xtY#!D|;$J2>UI5G(xfamGEle9`-L(Z3!&Qn*xl z<*rjOF7EtdrWVMogD>wL+{yfY=f!&a>O|i2iD_5Jdivk%L5u4@v$b>RGb=bky|yXTH)ko$O- zb1dsM6954KBQq$P+n31gj|_or%Q*{DsDU?<%d~<|&sxOfSpYQ-{h|s`kDfzKLN)dS z#Gn^#01i6L7lv(OCe~STkZ$r~+|PUN<-nYI>uFWrubSL~LMjURq=#CB@(dB{*w8Fg z)|qu;as-v(dF*(f%=m1)%8K9Pew0uXNin8qUKS_Jqn0=U*9BtQ0<7Kt<) z83uZhz-$@jS?z?Zcvx;iPW5~b1{3ijD*Ic-!ESOl_j*}lvLLTqI&C=@nhJja DS1R21bXUO$-cEUNAfS)MRJ~dMV7X z^QExEPA#AsFGhxmo{TSdyyR!t2~t-CR0q<(!a05i2P=c%3TOEp&nC~bb!Lp5eAiaH z-X18g0W@R9Vfh^vKy?e887?w2G+cVj&+zjhGxI7Y28Ibv1|}09aWnk10;+w)?eOz4 zzr)W3$qW}k@}|gQ%@8pIB(VpJ876|%X#>R`g7h)R|A4cbdlo$^xxI5w9XY&3 zc-wC4XX_5d-4zs`tz<>t< E0FkW8J^%m! delta 523 zcmZ3{$+V)AX~G3T6z^-9Jr#^&VehtnoZ4L3bCS%bxb zan0sLmem%MKd?wl=CRfB%wS?L2Wk@0U|`t5p~x`t1v|q}21bXUH4F?>Ua&j-)B=io zGCJ(kWMvTaWMtS0lFJ9mf%L3!j^Dun6kp*izvJcPUR!6zu*nx~wd-ww@)`^cK`Rc+ z?=S_bTj0!ak(r_4(qmzUpAVUtS1~a#OmLcDGVu{V!%uUd+DH5jKOYM_{9KUCa1kVL zge=w!5z|Eyd$5>cB1j$3%~KwN^fAZ(fU}$9?0=}jCE|W4LD>()9e&CK*)WfSJR%3= z14C;9!vx!jDo{C2#>vO*{xPa-K5B2^$hM@4ftg{=pO)Sa#!7K=**Gq+?4(%v+Dc) zPqvd6H9IKOY%kV~_kWt)tC_KIQ);s8M_&DpyiVndoHA0%*YomUoy^qIpvIbDml6JO iUeznsm&SXXE%kl<3oj(RxS^7~=S24EN1uHm)&c+oC${7O