From b927d70ba7dbde8ed49db57df70010572ca44fcb Mon Sep 17 00:00:00 2001 From: p-w-rs Date: Fri, 30 Sep 2022 13:50:51 -0500 Subject: [PATCH] sstuff --- Examples/concurrency/con1 | Bin 0 -> 50216 bytes Examples/concurrency/con1.c | 25 +-- .../concurrency/con1.dSYM/Contents/Info.plist | 20 +++ .../con1.dSYM/Contents/Resources/DWARF/con1 | Bin 0 -> 10399 bytes Examples/concurrency/con2 | Bin 0 -> 50208 bytes Examples/concurrency/con2.c | 32 ++-- .../concurrency/con2.dSYM/Contents/Info.plist | 20 +++ .../con2.dSYM/Contents/Resources/DWARF/con2 | Bin 0 -> 10427 bytes Examples/concurrency/con3 | Bin 0 -> 50208 bytes Examples/concurrency/con3.c | 35 ++-- .../concurrency/con3.dSYM/Contents/Info.plist | 20 +++ .../con3.dSYM/Contents/Resources/DWARF/con3 | Bin 0 -> 10426 bytes Examples/concurrency/con4 | Bin 0 -> 50256 bytes Examples/concurrency/con4.c | 32 ++-- .../concurrency/con4.dSYM/Contents/Info.plist | 20 +++ .../con4.dSYM/Contents/Resources/DWARF/con4 | Bin 0 -> 10446 bytes Examples/concurrency/con_dekkers | Bin 0 -> 50280 bytes Examples/concurrency/con_dekkers.c | 37 ++-- .../con_dekkers.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/con_dekkers | Bin 0 -> 10549 bytes Examples/concurrency/mutex1 | Bin 0 -> 50424 bytes Examples/concurrency/mutex1.c | 30 ++-- .../mutex1.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/mutex1 | Bin 0 -> 10630 bytes Examples/concurrency/mutex2 | Bin 0 -> 50424 bytes Examples/concurrency/mutex2.c | 33 ++-- .../mutex2.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/mutex2 | Bin 0 -> 10678 bytes Examples/concurrency/mutex3 | Bin 0 -> 50424 bytes Examples/concurrency/mutex3.c | 33 ++-- .../mutex3.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/mutex3 | Bin 0 -> 10675 bytes Examples/concurrency/prod_cons1 | Bin 0 -> 50656 bytes Examples/concurrency/prod_cons1.c | 136 ++++++++------- .../prod_cons1.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/prod_cons1 | Bin 0 -> 11139 bytes Examples/concurrency/prod_cons2 | Bin 0 -> 51016 bytes Examples/concurrency/prod_cons2.c | 160 +++++++++--------- .../prod_cons2.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/prod_cons2 | Bin 0 -> 11415 bytes Examples/concurrency/race | Bin 0 -> 50152 bytes Examples/concurrency/race.c | 88 +++++----- .../concurrency/race.dSYM/Contents/Info.plist | 20 +++ .../race.dSYM/Contents/Resources/DWARF/race | Bin 0 -> 10323 bytes Examples/concurrency/sem1 | Bin 0 -> 50408 bytes Examples/concurrency/sem1.c | 34 ++-- .../concurrency/sem1.dSYM/Contents/Info.plist | 20 +++ .../sem1.dSYM/Contents/Resources/DWARF/sem1 | Bin 0 -> 10495 bytes Examples/concurrency/sem2 | Bin 0 -> 50408 bytes Examples/concurrency/sem2.c | 35 ++-- .../concurrency/sem2.dSYM/Contents/Info.plist | 20 +++ .../sem2.dSYM/Contents/Resources/DWARF/sem2 | Bin 0 -> 10541 bytes Examples/concurrency/sem_list1 | Bin 0 -> 50376 bytes Examples/concurrency/sem_list1.c | 100 ++++++----- .../sem_list1.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/sem_list1 | Bin 0 -> 10633 bytes Examples/concurrency/sem_list2 | Bin 0 -> 50632 bytes Examples/concurrency/sem_list2.c | 116 +++++++------ .../sem_list2.dSYM/Contents/Info.plist | 20 +++ .../Contents/Resources/DWARF/sem_list2 | Bin 0 -> 10833 bytes 60 files changed, 793 insertions(+), 433 deletions(-) create mode 100755 Examples/concurrency/con1 create mode 100644 Examples/concurrency/con1.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/con1.dSYM/Contents/Resources/DWARF/con1 create mode 100755 Examples/concurrency/con2 create mode 100644 Examples/concurrency/con2.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/con2.dSYM/Contents/Resources/DWARF/con2 create mode 100755 Examples/concurrency/con3 create mode 100644 Examples/concurrency/con3.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/con3.dSYM/Contents/Resources/DWARF/con3 create mode 100755 Examples/concurrency/con4 create mode 100644 Examples/concurrency/con4.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/con4.dSYM/Contents/Resources/DWARF/con4 create mode 100755 Examples/concurrency/con_dekkers create mode 100644 Examples/concurrency/con_dekkers.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/con_dekkers.dSYM/Contents/Resources/DWARF/con_dekkers create mode 100755 Examples/concurrency/mutex1 create mode 100644 Examples/concurrency/mutex1.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/mutex1.dSYM/Contents/Resources/DWARF/mutex1 create mode 100755 Examples/concurrency/mutex2 create mode 100644 Examples/concurrency/mutex2.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/mutex2.dSYM/Contents/Resources/DWARF/mutex2 create mode 100755 Examples/concurrency/mutex3 create mode 100644 Examples/concurrency/mutex3.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/mutex3.dSYM/Contents/Resources/DWARF/mutex3 create mode 100755 Examples/concurrency/prod_cons1 create mode 100644 Examples/concurrency/prod_cons1.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/prod_cons1.dSYM/Contents/Resources/DWARF/prod_cons1 create mode 100755 Examples/concurrency/prod_cons2 create mode 100644 Examples/concurrency/prod_cons2.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/prod_cons2.dSYM/Contents/Resources/DWARF/prod_cons2 create mode 100755 Examples/concurrency/race create mode 100644 Examples/concurrency/race.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/race.dSYM/Contents/Resources/DWARF/race create mode 100755 Examples/concurrency/sem1 create mode 100644 Examples/concurrency/sem1.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/sem1.dSYM/Contents/Resources/DWARF/sem1 create mode 100755 Examples/concurrency/sem2 create mode 100644 Examples/concurrency/sem2.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/sem2.dSYM/Contents/Resources/DWARF/sem2 create mode 100755 Examples/concurrency/sem_list1 create mode 100644 Examples/concurrency/sem_list1.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/sem_list1.dSYM/Contents/Resources/DWARF/sem_list1 create mode 100755 Examples/concurrency/sem_list2 create mode 100644 Examples/concurrency/sem_list2.dSYM/Contents/Info.plist create mode 100644 Examples/concurrency/sem_list2.dSYM/Contents/Resources/DWARF/sem_list2 diff --git a/Examples/concurrency/con1 b/Examples/concurrency/con1 new file mode 100755 index 0000000000000000000000000000000000000000..267abf727bb93207be78959248049efbff8d8558 GIT binary patch literal 50216 zcmeI5U2GIp6vywjT`aY@#i-#^CVZtD?CzEp0RyzO6P8#C(rqv%6GBeu` zVq>vjY&Jz+O!US0V#0$DeNqx1Ttz7+BpP|)!Nev8Q<9oAu@4Or)^p~g-A>`bCu01c zv>}Tl$Ncpo2WT_Yb=_SQ>k4l$ zw-sWvR7z=Dxh``t<*zq?(5bi19pPzjLZw@8m78$t$+XtnuNjo{*Q-9{)Z6QhXU*If zZN>VMre$QZJ?;R1y;irLhlF*hEvro(Qs%OQnQTgCvfa9^mp_kdZaseHY^?n?oF3=O z&-G(+DO;Q4&9dcqdx!IMo1A@m&(YuVd1L3t#Ai;*9^Kmm$;Z~K^GU}|)+b8SNdP_5%NXn$%*QaN_ynny7G@luJ^>|$A^W?r#ld{WPdK*@* zFEaY?>Mi|#v>k1KU2Q$;oDLxhzUM%it=0w4>ndH_Rw5hW0R?9-mDGCgB&QY9d}h!%LhkI5W|vpnvHh%9?Jj?r`uM%@ ztd{oAb!zDMsMPqrd&#+v_gtRZLfZ%|t%cUpF>G2|U)|w4T34ov29fO~=lVAb4$qfd z&AebB00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0wC~TBhVQezZ)ByRbt~K3$eVqkQd|X ze7OM~;lb6l(t7!Rf?$OpSU zd77ml)B(F z^Sr;<#Ic3g#K=svFn%L8@%-GwVsYkc%8xA+LznmqL@K_E21W}rpOX59=geHT^T+7M zBh&80uXy5nlrNq57ipTPQR7VPq-ZMmZnN`|WGwI8cZR>-Bw^Q@X(5qs?4dDq>surU z^)@?q%E{euav^HGy^7+FRn%GBQE6YR>}xe$+a@-zp{BW`xZ^I3zmlelxc3KfOY>)z z_kQJQ14qAb6yfM5MW=M*tY#=y+RzfI{mPD%!olz^WmwNC2}7eyl~_3_rDwG&(Q>@A ztyO719#>jUs?Bj#X;$Jfidw5gQqN^A&4_ZzMOE*p0Ns2OIa_I4Mw-8QZ=jZ)zgK7D zn7=LMuS{#)uTDvF85jtF00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!Oy7Ca}rN;AY8hPWb3>XF(|#^Sh=;(jBO zwYpi=u(HyImPpAYT`i5X>q@d`^h}m=wgseEUB*#`>`PNcEt#`4nWo8ft6*P(Mutr* zVOXNU5{Jsgm3KsixH?)U%Ejb)A5mI`7@P5 zD5FAf;u7mBAtJ8+(A5pD<}oRICIw`lkf-d(x!m&U+oZe81EQhv)g+JLsdaRT9B|@i zDc)Y9xqmzPG&vjVc3(fwuQ}-SZKas!dzwOf{_i}Qj5W{q`fDjxxWl!uPdAd@S+f5_ zu72G98D}U^V^^c0;sskT-ER}?)k4&cI&0bH_Ivx^?e_0-`}dKiI$X*&`m++t^bwyv z<@Z6ECw zuZ)y-ir$d{ejQ{|&t)ymh%QF;BHU?eh8gbH2f1n0%(Ir>A8zT`y|*D6R)-RO{k@tQ zPU_iY&M>rWayTqVMC+0wJdiNL-Fh#*FlKm9efa#o!TS1i{ZO=PK< #include #include #include #include -#include // shared global static int counter1 = 0; @@ -20,7 +20,7 @@ volatile int start = 0; // turn flag volatile int turn = 0; -void* thread_routine(void* args) +void *thread_routine(void *args) { int me = *((int *)args); int you = me ? 0 : 1; @@ -28,11 +28,12 @@ void* thread_routine(void* args) printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; - for (int j = 0; j < 1000; j++) + for (int j = 0; j < 100000; j++) { - while(turn != me) + while (turn != me) { /* do nothing */ } @@ -55,21 +56,23 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); return EXIT_SUCCESS; } diff --git a/Examples/concurrency/con1.dSYM/Contents/Info.plist b/Examples/concurrency/con1.dSYM/Contents/Info.plist new file mode 100644 index 0000000..ef5dcb9 --- /dev/null +++ b/Examples/concurrency/con1.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.con1 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/con1.dSYM/Contents/Resources/DWARF/con1 b/Examples/concurrency/con1.dSYM/Contents/Resources/DWARF/con1 new file mode 100644 index 0000000000000000000000000000000000000000..b688738b06c65ed5125c538e7f01b37f1cdec300 GIT binary patch literal 10399 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 kI>$O; #include #include #include #include -#include // shared global static int counter1 = 0; @@ -18,21 +18,22 @@ static int counter2 = 0; volatile int start = 0; // flag array -volatile int flag[2] = {0,0}; +volatile int flag[2] = {0, 0}; -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 100000000; j++) { - while(flag[you]) + while (flag[you]) { /* do nothing */ } @@ -44,12 +45,11 @@ void* thread_routine(void* args) flag[me] = 0; } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - int main() { int val1 = 0; @@ -57,21 +57,23 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); return EXIT_SUCCESS; } diff --git a/Examples/concurrency/con2.dSYM/Contents/Info.plist b/Examples/concurrency/con2.dSYM/Contents/Info.plist new file mode 100644 index 0000000..0680b80 --- /dev/null +++ b/Examples/concurrency/con2.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.con2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/con2.dSYM/Contents/Resources/DWARF/con2 b/Examples/concurrency/con2.dSYM/Contents/Resources/DWARF/con2 new file mode 100644 index 0000000000000000000000000000000000000000..d99559239b4bddecbbc059ed8e6c3cc2377c09b5 GIT binary patch literal 10427 zcmeHNVQd^n6`sAj+1&Y@^Z8sm4pEg$+mKYEKHE6haojX+Y#OI&6KvDEF4C|*Z|=^y z+dFpm+_PdSR#8QMRBBTcTG}E}6;M?P38@GL`Uioi$`4dfAqk~bkg7)g15^}2)mFgw zc4zGKom~un*^%GAdGF19^XARo^UmzP_TiuYxs5R`%ou9{#X#>up~@~)xC?cH@u32-HwHYsYJAwl9+jUMw)|xXGVJr2b z5RO}&b5>Q2{{8K+kLSfkwyJ|>QHiHZn~x{*X0c-0&^6+<-r?g7t&Zr&epPJpFYCB= z!OE@TuaDoD#H$O*Dil>{UF(YwRqLUGH7^R*=`swB{#}xIwC1WbVkkXvTGyvQLX3@0 zkBXxw@162j_lQ4F2EI|D`<94eiCYc*bLILuY=%eorYh856^eiTI+I`L0q*0dR^TgJ z^Gjg~Q8a|JRGKRnMa8u@#Y@)>QSTT1B_4I2(WXq*e z*;4w(`R%M;-67Qv(x8@&`lGm_tJzn{(kN2F!d*zn@glAMLMN?Qt3DIlzFL&9;dsV{Z zKK)_K+oI>JmaeULOaPg2vE=GwEri0XvKe?*bBK$^B=P5QRN`X zcqsmiv}4-`J08R3es^5j)&AjxvdjIo_oTX1oEH_luxPj@!#<>Hxu)H>TIL?DPj5P={9 zK?H&b1Q7@#5JVt|KoEf-0xtII5%w4Yp=sJjiS5K_Uk}nUCkk`6VJ~II%tfgcDIwc$H<;a_3$?Rb{^CJ$_Mnrd{7_Z ze1x~^zvprNH0KYaQS>IhLw7lM(JGJDGdy-#e}kvcyIsHf4v$^;>U;HY^)l!B<9weU zPRyV-qF)U~5da!m9$$nHXgt>PPL&VTcoYD4Mn^dQVtOu`;RCbHy7+@U^=)7s#~2qp zexv>b_-THleucPx#T#P;G4|hg;_wAU&Gkc1T01{^Tgr{>AKto=HtMZcE2A$m=rpE8 zN|YK%q0(0jp%&(vXz$agv5-aK&g} zPLgzpB-WP2wG$NH-DZL9289-r4p@6XE-W3&rRXKyb7aV~)N$|^s9uPsX2GvheIdyr z1jM7s?}K&Zap?{nOg#er1}HSlQjdXCC_;y#sf(z4AR|eZyawThPBJn6KI&Z*{r7gW z$g>bI4Xs_jB8*9oh$zPI1EtqVi@aJWC)JO|r5G1!|OD{-(1c!^LacM;-dv zYL=ys0Sp^o>#QYNCdw7#D^;^zBb)*bR7JLE8dkMJXR6sVko|_NSjM+QO+b14Gboz2 zu+1!t>flufxCq&zPpqFkr)F>MMT*KgG zr}>kXIF;U&^YK5v`h|N6?3(-)T?bRK>47hk*S?19YF%a5Y%^Pr!A@I?oE z7es;Vf`hk#D6^BVl=twd!gux$dmdAQBQ>SGF2<%mh~yzLN^qp6Y=__VTUqPpq^2B5 zYRYJ6{iD*iJ|H!vBT`e20`~n^&VHTL^iP7+l(nFK?W@PUU{VSswU-akYIb-Ll7~rZ VN~dUj>-7~6M8%LyR5pt9zXA4CdHnzY literal 0 HcmV?d00001 diff --git a/Examples/concurrency/con3 b/Examples/concurrency/con3 new file mode 100755 index 0000000000000000000000000000000000000000..889c4a66b87cde8e43d2970d3ffaf87b4c52adf6 GIT binary patch literal 50208 zcmeI5U1%It6vyv2*_y^`qNu2?I;bsGYBt%VnhMpV$;{lF*)ih}sygW?AXL=cP+L|y-9KGNMu>#KtQ19$HE z-+RxQbANMZ-zNF&_n-f|K&e=hQfd=gJK9=Ysng1Ur_@zwX*8{m_8&++kh=GXj5b=V zQJzytp0BY`>*3V>!;MS4_`b$56=;;A!X_)UcFieQJl~@E+V^2InEE~_N_2C$So&r) zQ!ll4-14ZiJ`~NjdWWCy%3wvP!+@3`-{xSz&!_Wdal*7Q7R|TyPCs97uwJxqU$+hQ zWgXWpl#T@pqWK1cd?6Ci_12IZ6Iz!`lZ8@F7fNH6ryHNgTR}c~=3=6wIs6&_D$n&r zG_42whx_%wk;6m&)9v&389v8oFXv5~JSI7FS|78*JwTo}UyDqN_4)ChkBjiHf6h|Z zGf3{&6|O=*6R8W@vp&BI>k4yeUCd}_dVJI>>Iv6AZ$85h_wq}Q(C}_~=Qq?^=Q3_4 zR2%CvX8iiXeTuHncQ(@Zw9Z=N<5npgkM4ID;)U_nZ~^-I=P7gbruC?E_HEc$U(ZZq zeG>am`Of}+9K7rB-KoL5{L`USHS!#w#f$*F)Ky>G^&s0R3#v*9n-=upI|-=_XgRZa z^!KBenq>ZC=xfn`{=QO2k?=zJN72MC3!41CNS)H3&(0uz%Q+@5#+ZR7d=q8IP818H ziQIHC2Q9V@P3m~H<)Ll)H}^jJV&>iD;yaIgmBg5V=I;^FO*%c!_cWNzNNv&1XTxzv4 zvig>MsMqz$?C+{A_1;|Smr5C6}Y5AgX z*}HsOtJM}$E3(}uPOYf#ev7xw7a`KwL#yfe_$vrpY?cpJWdwQS&tas}{ETFK%FFNr zGF0L-a))YcE99B>JQP2sWrb_^-7yRw3ePfwbWIe`zSqs`R9MtYD;fpes-rDtR*U|t)WzTV}!L2`qz@xaq8+*_n`^X<_Ll^E=)pl&gWNk-_cWw2qTX8)&f6Ybc z`iE*ee#H8PJT7YaCy>j_XO_#~hc%;au2cH|6krgt0D zR@undCPrG-#zi@+WVWh-BO?a~jl)NVje&bp{lh7v-xyBA8*Eist6XwTyGv58tE8`D zxcPQ8vHE@!w0!g4gI=0^uP!FOd|N7CnYIUCokB_)8VQg936KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kifr8V0-ZY-ggFlXVBjs^#5{sygdn!011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)3H&bzTyldNmW^K0mzyr;wBwdX^=P4# zGi`N`trnDn8EsA#T=84rPuPW$J0_}Kl$*EBOipKUbxj$)vTpPdt5Cw2XECj|Y!WZ7 z$MeW&X3MUr^9aVR;$y|kF|~g@gY{|0&DgFw6lAuovRf#bYN%PgHnT}JsfEW>vpVCu zC)L79c(4;_7q=*7%qSIue_C{_QayowF3`P!mNhxK1ojg8Tqw|g8qr@uk2S?q&z{?| zvP?odaB1J?`T!9@ZPo?+WH`3g-hJd!eyhQhA0y zC()n}MD%?TZASD}&{v~vLz7yrL5q%INEu3><9uoFd};4|;f%}q(vkD!AM)^cM-TS8 z_Kx(1S4C@Y2=B%Tc@1>dDwkZ-?ppVfDly`iwv(8!CZ!uRo#U=Gkr){2?(OMHq^2_C z6GhWWWUW%RY};ljJDpGv-5pt#IFYdvV^$F_ij%lCnK-$3GMUULr@BT@=vzCJQ@z<~ mXKar%*$F#VN(@Vq?pwN(*<7Z#!`isf1`0lybJQy^VSfW6CPViC literal 0 HcmV?d00001 diff --git a/Examples/concurrency/con3.c b/Examples/concurrency/con3.c index 52a1c10..b31d09c 100644 --- a/Examples/concurrency/con3.c +++ b/Examples/concurrency/con3.c @@ -6,11 +6,11 @@ * if both threads set the flag at the same time */ +#include #include #include #include #include -#include // shared global static int counter1 = 0; @@ -20,22 +20,23 @@ static int counter2 = 0; volatile int start = 0; // flag array -volatile int flag[2] = {0,0}; +volatile int flag[2] = {0, 0}; -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 100000000; j++) { - flag[me]=1; - while(flag[you]) + flag[me] = 1; + while (flag[you]) { /* do nothing */ } @@ -43,10 +44,10 @@ void* thread_routine(void* args) counter1++; counter2++; // leaving critical section - flag[me]=0; + flag[me] = 0; } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } @@ -58,21 +59,23 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); return EXIT_SUCCESS; } diff --git a/Examples/concurrency/con3.dSYM/Contents/Info.plist b/Examples/concurrency/con3.dSYM/Contents/Info.plist new file mode 100644 index 0000000..b4a0069 --- /dev/null +++ b/Examples/concurrency/con3.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.con3 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/con3.dSYM/Contents/Resources/DWARF/con3 b/Examples/concurrency/con3.dSYM/Contents/Resources/DWARF/con3 new file mode 100644 index 0000000000000000000000000000000000000000..c25bdd6c35b127b97faca68e4ce25ad8970a708c GIT binary patch literal 10426 zcmeHNeQX@X6`#Gk+1&Y@^ZA@Owp^6sBTbOXoo!5FCnm(iE^!Ei+AaixG+m$9zH{#O zuDg5wP$I>ms+vELAXJG`3KFPas8Xd0p+ae;R;?oOPem&#CvB;ygox-L{ZQ!#0@U{R zc4zGKolV{T+a3AsoA=(#Z{EDwd)}Gd*FX5fKesWag&AW_pcv>~C{*b}r33V>=%Zcv zmj=#UHh%Q`;t%ImdZk|T8a6W)2BCyN)Se|7i-IkKKMLLnItCKrfuVawCP&6jLZ~Y~ zR-Lj=B%Et#D8$6bsfqPQum6$tIwf&b6p>B{*Iaa!wGl6QCxQa=+ci!_)|xXGVav6m z5RO}&a#mIK{{8i^kLSfkwyJ?^y4DsUs@6imnid6XrVK;9f3HY9T60zEF_fM-t?Olw5W_t)kfp1jkz9phq;#Ncd*>de1Hp8QPQx)p33dO&6oyo8B0QYfJEAZv5 z`K7RgC>p|9DovG(qT}F*RkI z^NsO)@eSXEk^w@vhwRpYV)IrDzJvC?R@{{>`lTc&|yA znNR)~coid8?_cJskEh(q?A;okyHwfGzcGn7EayA6MZEIVT#iPr_wUlR_5NMj_woJ( z)*u2w1cC?z5eOm>MBx7?0`$zCz%#DeFSL@3g8=n>PWyk7`n!+hxMd+b{~dTy^DRIYtXg5P={9K?H&b1Q7@# z5JVt|KoEf-0zm|V2m}!bBH&=J9$`-)5SpfanAlE?_Vpkwd!jI98}?Fm*qk?uWxR;a z9>q&S!tTy(PI!}mJb`;6Sl@lzRR`gFGH*x7=WD^{n?th3}~@v_s~lrxqq zTeoNYcNJ16yq6)FJPoGW3D=kLrY)r2!G}9F-qG{}p3sl;ScbRgck-D27v85I<_Gja z&Ift3{wp5WXE=WhjiNX4UAoJ;i&lBwicT&1Rn%8d|IIr*cHPtM(Zkgh&h;nxUOk*R zh1#HgEfmH4X=HhN5#F!ySkpUI-nYo30J=Lm$nh7`XQNr(H`%C*Kf+Vb0qZzV=@&eH zgZ>ow48H+Bfa_PiF$NK0|8*zMUQpCj|K>?+$0u(~xt{&QTQ<^0z2$0V^g#w4#*|2j zvItVB^bteo+fdvC(ssnc>NF-y$1#!b;=&`Lm%#GWU{@@xj&nHm(CLMGh;92mSae(T zXJFJ%OUArPO3cZ&tK8x)#P(yyeo7Z;We&8Fxb-ScF~v($0$7pPu{rY6C!Q++PU zA_T;v$?t%*<#Fi<4WzyZ{%cU^AWJ;~PN4`Lil#22?tu&@S@JCiJ9d(Z@%K<~r|AEA zH;X(20n^Z0wLOV89!@-VHu0x(iR7-XM5~sZDfka52G6Od#k>&7L3}I!C)!L=qIbXPToLci)AOe76v|e*r!Ui;=}zzSw72#2bwkSZ4rF?|dv8_A=zqv? zY%STb>}MSemaUW*hz*<0X}4U-9v#2Ezpp1dvS^gxm6Ju{%T;aLv~o+#Kd3BNF7uBs z#n9N;(8FSUbaF&YJp90j5O7VNf67WPt2@>->{*AEOtw_6vN`4*fX*Am9)^q8wud_O zvehI@-vSsmKGs>wu}qXJ#^P$+ege1-%R zFJpjHcA(;ADDZE35@VFr$n>O?)jVW#w$VIPn<)Aa;fLsz2(C2OFlNSC95srDKi4og z*=hcyB~GP#`F#9$uYKme0{cqjCtvLnx%9=ek2sINdF4wtow+0X^x4PJ_G_S5LHMA9 zy$hm1w!^{OK$O|ZSIT?%QsL|S4tgF_f+IDhymrPW-jC!VF-mZxrfi4b^>1_5Pf1NV zkkpjX(E59&XWu6^r6W>Pjso^WSI>Nz)bvk+)ReWLe*Fu_ykJraB(;|h(Q5MGJR}d3 W)Ra!q`qt~q9*Bw|nW$_O=YIp2NqDOO literal 0 HcmV?d00001 diff --git a/Examples/concurrency/con4 b/Examples/concurrency/con4 new file mode 100755 index 0000000000000000000000000000000000000000..ebe9fef9f79ebc47780a91a901b4073e74479e2a GIT binary patch literal 50256 zcmeI5U2GiH701uUUN8Y=gJ`P|J~B#36r$kuI?e|u27j%xh3RFT@>)o-vWxZp~ z%*I}-lm!zNcjXGHqOJPC#}f$gkcS9Wssvj=7@j~C50Rhk~hOc zcgSYgM7L{KKijF=ES2*7@|d>~ist+LVV&<@Gb7aDf)11KCKJ&4)TCXUwq1@z^R1bD z17^NxQ>u<^sW0dGZlN@>k-wGSu}5@$ArjHe){>hClq#2I3Z=X%l*XMvx8{4>XR?6CfI`*dBzePEGZ&YLv(t>nxpHQ|JNV0puQ9Wp4^ zr`HEQKZL)WlhCBD7lZRAb%jyxtC6}`2iB*%u&(gTC{@fVuQD~}6xFovn!5Dd;91rA z4u&Dtk|Q+!wu0J1tyDhiXG0b4b5kFz>U`loMK|Z$oT)vfa?aG0QwrnycL)_xS5@b` zZ8OyJdkX(%Q)@AJKf9e?Lw?diJsO(4+cv@Q11MY@83)V&@Hb z$0Lq&*Pl%R`$oS9pEPUKdWn=_Zuy|U?2bjAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z@c$AR&CLHTGq+-8<}a;hYU%YF&8OFDqicVVi*>0_=Dwjs`cL!e)moXOtC@w~e!eAl zg_geJ@mjodkZ5k55--<#8gIrDm*pnla`5=N(P%8DSERh>F0J$pBq*`)dls48nYGM9 z{NDpai|um3R3e-={tu4S+Fz7xFC5vN_?e!_0eVknFU|1NB)PhoWceL_UoHL?N9O9W z`S|OSE&ggKf5VPh^enslW=U8}ugK)|%JP%4y3B?3{({r<_8L5#s%Pdtw4VB4yfd-q z1({EYJrwdn}rjy@cGEXxL#;)EF5KTG5$usz66=6>Gv+l?MxOyt|k6` zsCM+%JcnQX6${?mz92TIW7l*n!CkmtYV1G2gN^+MgXf{(c{q4>@{{QF!aWbL(?8tU z|6i6bO-gY2@62#gu2U|5Dc)}J{w!XXcpr;5B;LF1U2xo|ZP)TAT|1k9$l9N`#Hk#% zDo)wTx;96))7D9Or(|!Z!E>Xhhpe;bMy$cd)BPi9tKS;Qus5`wa!$GA+ipryZm4dp zG^V?`1hM9R8*91e-ow2#xuY&7zT793o25I=O;eUJZZHr40T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5CDPi5P^2{|Gn=p{Vvn*HT_}Je}_s&DIfp>AOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&@Vz5&`#u_#P2Jv?uN3pj^UGsu ztWe6^F8$c0m&oH0WzQCT@jKX`b_*qcT+~ic{-kSX^D4(r-vF&ZufG#UYx^Zk-E;g zQ^C1Y!MWpaLC&3uoICw7gr7n51K7~P(GL&(mQPEmAjIF&Mfq%0&MB9C+f8kF-IN^l zY}ZRpJ2TP^+1}H>Go2h9K60Wbl}yiOr>2Xxm&`e(T-kN)Qm&FD7CoIgN?y#m$#JL1 zACi|m)}4Ij!I|#v$?nNz(JciB#^mZFf3bH{3!) L1G-MV0+sE5Hjipe literal 0 HcmV?d00001 diff --git a/Examples/concurrency/con4.c b/Examples/concurrency/con4.c index 97e955e..70c0de8 100644 --- a/Examples/concurrency/con4.c +++ b/Examples/concurrency/con4.c @@ -7,11 +7,11 @@ * Prone to livelock since threads might be constantly releasing their flag */ +#include #include #include #include #include -#include // shared global static int counter1 = 0; @@ -21,23 +21,24 @@ static int counter2 = 0; volatile int start = 0; // flag array -volatile int flag[2] = {0,0}; +volatile int flag[2] = {0, 0}; -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 1000000; j++) { flag[me] = 1; - while(flag[you]) + while (flag[you]) { // just in case there is deadlock flag[me] = 0; @@ -51,12 +52,11 @@ void* thread_routine(void* args) flag[me] = 0; } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - int main() { int val1 = 0; @@ -64,21 +64,23 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); return EXIT_SUCCESS; } diff --git a/Examples/concurrency/con4.dSYM/Contents/Info.plist b/Examples/concurrency/con4.dSYM/Contents/Info.plist new file mode 100644 index 0000000..274a7eb --- /dev/null +++ b/Examples/concurrency/con4.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.con4 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/con4.dSYM/Contents/Resources/DWARF/con4 b/Examples/concurrency/con4.dSYM/Contents/Resources/DWARF/con4 new file mode 100644 index 0000000000000000000000000000000000000000..2a7bf2d96496cd39a122cb8fc866276edbac3558 GIT binary patch literal 10446 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 literal 0 HcmV?d00001 diff --git a/Examples/concurrency/con_dekkers b/Examples/concurrency/con_dekkers new file mode 100755 index 0000000000000000000000000000000000000000..aa9435d5728f23fb6a461f6b0bf968fdb95fd350 GIT binary patch literal 50280 zcmeI5O=w)#701s=8dp}`j9f@b8>fCGv2cp3(TAlfiIYl}UNa`P<-`){2j()GdGbsp z&4@Q|Y)y&Cw5q{kP%))}tlDL==pxHN37s@0YN4eeD=)e*gcPY&z)%%LD4zb$`;bN> zyPGbu=>Ncd_x#Vj_uPAb@7~!x=`WvsdhZJ&v33z@L+M7@iHqD23!cbVQBo+zTpD}9 z{=WV4q(=8!Y`?s((mc1((U>XwyHoqS_~S?S$0XEPibO?w7~?rho_c|`=BuB@A@;wsvh;%fdGt74=3U zZzSxmI$UZHIk3J=$#e6CtGoI4^P33sMMzXP+rHdrFs59%o-brgzA#(#_5OVCg!%NH ztEq0y5wrwPeXnnz7&9?8HD<;qFJ2Db?r5-2LG4>ht>;aPzAHU*##}8%dw_gkzD{ja z8x6+$J|4=y`915pZu;j<*A?|bU2Rzxv~Qz96|F1EWz2lqlqw4|#d)*nx#7BkzW%cs zwC0EmcgsJ&kv1lq_R^7x_PM96YLGA5r|RZ>dp!fsm`rhDp;(CG!F!05$jRy+ z<0#tvK9zs788cJbyA21|H&WfdJ{|kt^6mY8oIiK*MSJ30a5``?gFL(E16nN?g4cC5 zukCTXxjyYs7g08ysG~axDHgPz*&ON|YF(4I--fnO%ln8U;TPdvQVn}JEP8exMbY1x z2ifi4i5$L9<3os9C`V9|<&vA6&(9>YmH8~Rn&#DY9Q{ZCr;Wc47T%R#y!pzN(VYRr zEEFsWhSBXueBXc9hX&iffvDb#$WCJanx`ATN6n`5j-Y6p?zugC9NUQPtp)43Tq$|Z zLhspLtSdi*POu&n&HrIN;Q3Ujl^2Z!NPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCTzT-QLpW{djq6^lU;BYwtm%G8eW}Yw>@b z6#3FBTUXwnO&p&PiFmHt|JJeVwst|a?QeDM!cJ;!d85C+`ax>#;p)9c zW8*hyUfF3RZs-??$b1SN`|BIOg!-+H+4z|sS8B_5!htX7z@H%AJn)~;80er122R6U zkH0n+d?cBw1@ms`*P9T2t_{3DsSOp;2UGtE0-JimkC`C$K@dxziZ&{Z6Nk{)IML}p zyZq-7JkPH^_9awfmm4QOLH}F&9jR>o4bXD>ndRnR)%%)yAF0=;-XGw-Qgr7W*Ya|% zlg>V4oyc11R8CoyV%bW&4kBH0uv4~JaJpoCa{By)b#Zda8h_ayo3gDjYbphAqDwNx za=~-leoeWn1_BksZK-}`+8us%3aM#mBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0-rO1W8wdM?+NR^uzn`2Kj-Cf zdJ-T35+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*_`e`<^a+{LjUFA% zR_3#&-F(5DRn@J^%ehWEYchCxjz%A8ivF;e zFCgYy%*f$3_2OnBhm209>^UZf!I&yOJD m()B*r)k1Pgb4A0yIh-CD&J6Yz4{m-x8J|Re>^^%?%<>=afN%={ literal 0 HcmV?d00001 diff --git a/Examples/concurrency/con_dekkers.c b/Examples/concurrency/con_dekkers.c index 14ae8f3..4cd5f5f 100644 --- a/Examples/concurrency/con_dekkers.c +++ b/Examples/concurrency/con_dekkers.c @@ -7,11 +7,11 @@ * Also does not work on modern CPUs that perform out-of-order execution */ +#include #include #include #include #include -#include // shared global static int counter1 = 0; @@ -24,30 +24,32 @@ volatile int start = 0; volatile int turn = 0; // flag array -volatile int flag[2] = {0,0}; +volatile int flag[2] = {0, 0}; -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 1000000; j++) { flag[me] = 1; - while(flag[you]) + while (flag[you]) { - if(turn == you) + if (turn == you) { // just in case there is deadlock flag[me] = 0; } - while (turn == you); + while (turn == you) + ; flag[me] = 1; } // this is the critical section @@ -58,12 +60,11 @@ void* thread_routine(void* args) flag[me] = 0; } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - int main() { int val1 = 0; @@ -71,21 +72,23 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); return EXIT_SUCCESS; } diff --git a/Examples/concurrency/con_dekkers.dSYM/Contents/Info.plist b/Examples/concurrency/con_dekkers.dSYM/Contents/Info.plist new file mode 100644 index 0000000..288e358 --- /dev/null +++ b/Examples/concurrency/con_dekkers.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.con_dekkers + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/con_dekkers.dSYM/Contents/Resources/DWARF/con_dekkers b/Examples/concurrency/con_dekkers.dSYM/Contents/Resources/DWARF/con_dekkers new file mode 100644 index 0000000000000000000000000000000000000000..f304e21e61fe11c8752149ec735cec1b72d2b603 GIT binary patch literal 10549 zcmeHNZ)_Y#6`#GkS>O5W^W8ai9NZ|El9EKwJKJ%{pB}E=*sYzWNw7`grl4VcUi&V- z+dKC5Tw67Y)gn=(en_CLpalftZzcMn5-ESGN>NKBzElNKoKyk{0j(;cs;FwEs6~X| z+ub>z@9JXs+I{ldnfKnzZ{EDwd)}Gdm*0Ey-%X4ue#TfcI0SwJ3Q66lbb({ndf&Y9 zkA24T?9rc`{=(q(K3A{U4OpaS7h}*!UU?ENp-8FJ%Wc&n#I&!e; zlyxHETt!16CP$_w*BkBrgX?ut;;2X_oe-A3Xh~}$-la5x0`oqakV^qsp)$Z$YDFQ+ zR%NzR)(cTF?#~%BB4^ANp{e)pmo6Tyxukjwsi%_G^_yTJhKDAH z#E}!nC!EzCbmqxWeh|@pOH8rEt%m+{#o9S+gcn3xNz`8w#lLo)$*+e2?%>E)C|5S; zm&6hxuZi+fVY-+XCCl6pFHti@tzYz$r2AKr5Hp&kNvYAl#ERqJM)O?j>C}YC6bpr- zA@%k1-Q(g>j3w2sXYIXAb|I$AYrlp@{|>G+`uAaYYx(2Y*zvnZhR2+{gRx8QI!MRd z@@;YgM1Ix!MmSvvEarE5X#7rU;?VEva1xGsKP5yE#h=#0714i2pRUY_e9q9xz7gI< zIe3CvZA=nRGc{vQFE`*_{JrDfpbK$v=f+rMk$CRUvjOj27cc4t{oPICY17lDzR);d z{)*#YyE|XLYjge~DcKF{6F)ZEet=9VR zuv5qieNoR;EFD{9Z3bIpF`L)sm?&sDgJCbOnHCdP)`U@*#fn9b>B6d*)eR2D^~j5W z7XdEC*kya{bUk_GN$8yuA zW-g_M^#wg&#EaeqP( znnlw*rsnv^U}{yb@-6BV-!{uz)9TZ_lg3c}i>o~54^O?uqpt%o4b_~D^l{a1ta7fN z=et#Z#}sO5^{Ow3;K5&c^x=PzDLmBtT7~y7@*n{32&Osy01`~`{xglb@O?b~J%Am> zAQ$X%J6z>(bvs-~sa~-M!M6$S3wh`Du8h!8S~-yP;BSuDaBabg$I1k$p&2^zdX$GU4rt-et zJ6$Qem88)Eu7LdFO(czx#M%~d-3j*ZXnP37C&9jjD1B5A8^DDnd~@-Ws60!CEQ_B) z`8?Hg!T2o7_o;q1$^u1Hcrf|`igpW^F5jW}1(a`reTP~6Nt6@{-)+J8_ffY&(oq(D z2f~&PGNC_Kvy-C#&mAoAQy4INC8pdGY3KgPgUgY(&PAeIyCX3rj!z+c{mdU3YrlQl z;qYx?Ul-=EpN+L+(RV>V5Dtd{s3@dScfxQ0aub=t;Q>^GPH)*a)P_-;lNcNjI}H9g3}O;#ar!JkZ=%U zyKM_Qwk;jXZj9f-?QWg+EI0*fh+ZcrGI_j?Pb?s3<%&k4w?EmF>`CmgwYT>6_drVa z9ZL50^zE(7Z~sT`WNT@Zr9M~2n5k0nekz9b^1M|nrH)MOJJ{cw8d=l|aITy}O3hSE zQ#Ue8%sKMR85XloIi1r`F*H6tbg!5gJ2N6C?>#vp1l)9wQ{74*t2-st%(*fv=xnK2 zVP~0rp1Pprdl@cv+g|F>$EwMjJ~hxxd<(ReyO}7Kv@cckT8${@a6BtAd0jIqB|4$a z%tLk>vV0L=CN%(M@vkPYo5IvHFjkLo1zdz|&<9+ZtY)&&iJ?*4$@WJYO(K z_8hiXg%TmDDK&O7HhDc@2apmWsVOVs_y6aN@ggKUSCX1iC|W;T_|A1wQ`#amX#oH{V{5cQYESFyvf+F&KzDKHDyy$Q`$xAy|1s>ATowzBC5Za HC^r8ArbCsT literal 0 HcmV?d00001 diff --git a/Examples/concurrency/mutex1 b/Examples/concurrency/mutex1 new file mode 100755 index 0000000000000000000000000000000000000000..2082eaa72d4567aa71e3aa056851d4f477dafcde GIT binary patch literal 50424 zcmeI5Uu+!J6~^zz*~FxPjRYtJDASNc0a34aiGzb`y8bg_5s8!HO@msYtM%^KyJUCA znwd?!P)mzUM69i)yj0==@l?@@BEbU^k*b12su-TIDpjhgBJn`mwd6_>&4Wb|?m2Vs ztY>EfFFf$_9p&D8zH{$AbLKa9_HE)%zWmSEyM>7L2qAV*>!-FE7vh32$P?loY8h%$ zo*I49{Dt|=aj0mdO>&Q(LQr4>HOVxrbRcCBpcRr8HIv+oC zHrCM`YDV?^TwkRo<-}-qRF0pVoKjCWt?CM%V|3*6#*H5npE)UK?cg3req+8~o@7g_ z{k~5f^QUv%Hm>U;C0BK|!-Ai_e>BoMM%uTu8iKllGb3d=C*68w+AhmE&-uoD!)m*q zpK}DpHMMIdU&=zx%LTLD^$j;veF1;g;e6XWl_%x2yM21Q^EGt7a1G(->9YtWl`?Nv zDt0vpMfqLS`2s$??%VQh|9%{QYVv7w;wg1Hgjk6@2hwbtIx*K3u5CY&9pnWoif1p4 zds%BUR@6DXOyjc@{wwOfAJUq6!9V~6KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l;QJ&+TPuV8$)wtgS$yTBh4uKV4mTU%SJ<_6#4OA8z6u|CnaJVAnzTpJUjm7^5R z`2WaVT!}5kzaXa>zaGeclS3n&0r z@SfIde*6SoZ{ah&arJB3c!}cSjY+kUKSos>^Zv&8e!7EI|J%k)Q(e0COP*<}bgfAe z&7m8k{?&I=61t-SKlZtb#Z+vcpKhc{!InXOaK~E*hbgpm@NvKYiQhlr_i4W$^ZNI&q0fnMXdjeC=~fK%JqM+$Cp|E3wwj?eZ(F=we|Pe%dz(^doQy0 zCV6LU=d9%zUeU2~g~yG91%sXXBSzh>89B$I$R5$Xs9;yEJ!1Ui>Ejc|YuJH<+4hv*S&FN&Sw;!Er{UZ8(#G0yrPwcC4z7;ey|$iK$=79kp1uW9|V*1V?R z?<9xp@6-yur@Gr{F0Ah+J<}5tLqm_{c?EAB;BG|uXUIPg((E3f#@A(IJsFwj{cC#v zEcv`Y(7crQe?g6nHSZ7RE94tIq0J?ID0IIITEE;-dtZsHC)siT{Al`O{nV@Vce5s* z>4wtxv8GMI_4l*hBg92L|B#*!cpM{5%lR_C(SJkHp`VOsKGfm$Rz&|QqAx}C8xegE z>3!7hrN*`2Pwj`)9-wAW`?h(SrZw^==T!RVRQl(X-aS62GICDU%NM+M(HE|*{a3B6 zI$yF#*nfp0G5un7{RT+shv=n0$M3hy+qJ4^Imxz{5{c8U<+zDC`#cX5mV4H-=Mv*n zj}9M6Cd~O #include #include #include #include -#include // shared global static int counter1 = 0; static int counter2 = 0; -// start flag +// start flag volatile int start; // flag mutex pthread_mutex_t flag = PTHREAD_MUTEX_INITIALIZER; // The thread process -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 1000000; j++) { @@ -41,12 +42,11 @@ void* thread_routine(void* args) pthread_mutex_unlock(&flag); } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - // Main process int main() { @@ -55,22 +55,24 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); pthread_mutex_destroy(&flag); return EXIT_SUCCESS; diff --git a/Examples/concurrency/mutex1.dSYM/Contents/Info.plist b/Examples/concurrency/mutex1.dSYM/Contents/Info.plist new file mode 100644 index 0000000..aa6a1ae --- /dev/null +++ b/Examples/concurrency/mutex1.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.mutex1 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/mutex1.dSYM/Contents/Resources/DWARF/mutex1 b/Examples/concurrency/mutex1.dSYM/Contents/Resources/DWARF/mutex1 new file mode 100644 index 0000000000000000000000000000000000000000..85aaf3bd945e0f30fc6a984f6e2761d2e64a89f1 GIT binary patch literal 10630 zcmeHNYit}>6~42xcf9Mh*RMPrMImk;q(QK2yH4XcCbbj0jgvG^Z6|RPs>|$p;@xC- zb~8Kc+QcGO>BB!Ngh8!Jp%9@8`lCoiP?Qpo+8{)W1c8<|DQYWzG!dd8P%ET}_jhLQ ztk-M182&QXK6~zY+;h)8cji9l%3uHZ&nm_gl`&Qg2m^ixhL_eO(+n7S+OB%`_4ZAV z^o@M&iAx{+s9o|EN3n)66@U}~kUpztECe(I{3+mdfc*d=j`ZHuf1-bA5JW|CZB;NU zNV0Pcib9O^kB%%9I^}y7@;r(o;{ox6u#HLElP+QJlL!jLm&=?A&Z{#PWHaTY5CyxK zD3n;0{$1YV+WS~Z!=*hkB<*RE;o1`^Ba=5Q@G9;7LE1a!833l(m(n8tk_FpJo8wZU z(%#-XTz|?!QZhxE1-3y8Q8e#Qn`0tvp2|7&!v44@?NOh5snUkWCrthN1VD(s-jQCh zZ}9N2+q*q7PQXhgdTt4*oA9Wi{CKXs4a?c1XVXhm-b)n!vd7=?YZk^`JDwKs%*y=o zo*5xBx+qL#6S<7Y+t#x7I?Jjk_ltZg_gRQB-PY%oEB)(~{*}kS+}?aiHz!1*F#q%} zZtsk=SMEc3f0n%_jzJ-kxokFPdi7NLH!JOV@gcnrvo}9}92z)$u)lA>eL5I>QT79M zJ|&6Yaw+GzDEE!*G$Ro3=XmeXol*TmH^+^_B76B?x&F0E6Zu<~w?z`qo_swQ*}EX^wacJiSfM>Vk+6)3 z#qE9dHP^o;+1^(-ugpITN{(V>{I37nwfC;HcYVu$vZv?s8AF(Q7SUVm-z#sp_Fk4| zUis*MVK1*IEB%|h>e}<%n%lNAd-ha*N&lXg_P#CK`}_*+223Bj88i|0e>p{EK2y@9h^Fh{ht-iG!cJKb3M*H%<+2>L`N@xf9|1oCegymo z_!00U;77oZfFA)r0)7Pi2>21mV6Prz-$Ec1MfqE_mJsdh0ZRN(I$`P7RJ_laFfut@ zM925xQcpL>4qs|;91aj0n}At z)jO6^hrsv_Ah1!r59lR;ayIxIpdRHge;@d>#2RG$Ch$X)KN4aZ)yYFubD%?XJ>SVR z4J=IwM}R_AfsH`lgFtNvtKJz;^$TEVTd8O;vK@$MwKlBI%)l)2k#>(64XY1IW=*Zv z3S7l9<=AfMsB3?Zd^9jOd7wnq1?KEQqSldFQ28OE))Q4PWFSUeQRWzlHj#+22JcLY zTB{rzCDCot#^ilO?U0n6AnJBWrN)WsdNEH~3kYshzYBB@piDGg z1Zw&`eprh#J|Ei@;}^iZK}zY66Xz}HUFCE=YkUvP;B)wCR(A296DCO)<5!WV7%00# z{B7i&(%mSr0Sc>DlZZLpvxd6o&l{oHplppcaW(qDbo5W>qxEaoM;nwzeAf`@U}|)r z>5g?>k=>C%Gu&Up2Ab3;k*K{%QKONFOYmApm55Hrv@Ia_L?XymDat?-dj1v^-3dBO zqDW*9vei4lL+85Hc$L)D!LQmFylT{Xn%&yAts^(kv77}Yi%QmYEFkM6P9b#M!qRTp z#yY3ACdX~=y1i<(vJGZeb4Rqs@sU%6dg*SsC7Hq9ddq}i71BAgrL7~@8f$I2)!}}k zt)mrGtbJFkt+jnSD-A*a!x+fsheH-WT0nL2eC~cieMaGooy*7f4d2$;(H8HY)U)ub z5KrdJWYMw=GdabaV@+?+lfxq2=Ia(dx2YU2naJh!vqfVuUlh_f9hG91$>GDFWJ;&+ zPI`xidhZp(11I{$$h}AUg<$UKY1*_|>FiZz+F8Yss&0)JSk_=uxgtBwoWs`%J=4bU z=3)SzIWEIVWRS!ZMN&dgr@Bz#Y&geaW?d zxOYF^4~7Tbfg0*}B;qOH{0oU_!oI-*p1*S0OQ81PYi|P!U2dzu(O4 z>2BrZrIfyWe|Tno-`~vq_P3v%y|=ag{Mn~p>=Yu_C4|^Ut%ur1T!?GJB2S3NsAZ^0 z`NH5C`(^vZ^BnE8Sf{+N;yiz&g;I{&FO7FDQTx-KF<~^7BErTiqzs&yfIV%|d@HBu zW@zdoQxxm%;bI=Qi@A0wr5{u${8lKM?+?%EeBU)ILLF}CHu-j#fX*iiPHEclC>G7P zX7c^WtY^*KTehXXoF90_%9L3U%{TOYU0;ZVb-Q)srU@yll`F+cUKT5puF{>)4wiJwMkssYy99I6f$c&ySAjr<>Mwh0ifM@_FONkBQHmlv8ea4~Ai+QdjJOY0%5D?Bq&ma@{Xl_%VioDRIN%r~I7 ztNffJG_I*tGx<{Hvq3hT-CEzkoUSkA&$>O|=1%QNIpJ@f-mUrOOuqIS+MlOl(Uw%o zoLertl`s_LcirR*`S7~0%eVRaarXJqAJ`+$>(e2`a^yLXX4^1{xvuuw4iVWtUa+ir zcGI|*wJ~d1pTnCpzCJLWWH9)lV;mbjqBLI=jR{Zc=N>W_x^ga`#%r;`#_3f7Bwn~ zjCOZDsC@OTcRbU@zc>6|gm#qfpYz;39Y*xX*Bzk7b9~QT`Ga&jvCUejp0S!AIOX1< zUaG4&L5s+qpvL)oZt44e(rD%d0|5{K0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2Lz|22UN znT3C5=GUyu!t6$-Zg14Zg1uh9uzr(2yzBp9{xgxVZ!OsO>Q#!~%PgLLn!cj@wP?Ic z^O?oCGb}`1%x{Rq8_UO9T}uxoL}F2rpd_CR3DLMp zDeCe4lwp23wh;d&r;7K4awj>o@;zSp3ay-m|{4uKD zm{S|$hv;7JsBarHb$#i^k9nr9(=|p()Q_(Zs;lp$By?N7D)zCC#dK_+N_VmUkH3|{vQ1f^LO8S%(%~tht1e)#sM>i#lH2<+x(}jVITkk zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00RF7fj!?57kT@hbiP)~ zOFyVi$cbVl?|9;eo>&q-%}8ga7_i?>{o$>wE_`oQ7n-nQtgZn45K zt1VWp2F{GkJAUA~HJ&`WWwPYvF7Zs?mYHhB%n1>b;(={kd0dtYRH2ij#IiueQ0ei> zQg%uVm9upHj2~pZK%6s`dTuo+Rva<5T`bRS6J6r&Yht^&ewE#o8vVN$w!2%1 zfjPPq`R}uSK!`b`?;8EO(Yz+Fc9KK(cWQa%>Fyz#YuAsGp6rT=RRyGSB<(p4M|yJ>mOphONi@c{z)?*@;E`7mh)wl z(SJkHq0dA#AL{n?PDKASqL(82MnpeGdLOm@)VTHo)V@XSAT^8H*Ui&3t&#URr&66$ zsm>|Adwfo1#$qT;Y`N?Vb3J)WWe<^UMlfz@r3>@oE+B4bmbjk6PIk%FldY)6s)sjM$m+H-l z #include #include #include #include -#include // shared global static int counter1 = 0; static int counter2 = 0; -// start flag +// start flag volatile int start; // flag mutex pthread_mutex_t flag = PTHREAD_MUTEX_INITIALIZER; // The thread process -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 1000000; j++) { @@ -41,17 +42,17 @@ void* thread_routine(void* args) // leaving critical section pthread_mutex_unlock(&flag); - if(me == 0) { + if (me == 0) + { pthread_mutex_unlock(&flag); } } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - // Main process int main() { @@ -60,22 +61,24 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); pthread_mutex_destroy(&flag); return EXIT_SUCCESS; diff --git a/Examples/concurrency/mutex2.dSYM/Contents/Info.plist b/Examples/concurrency/mutex2.dSYM/Contents/Info.plist new file mode 100644 index 0000000..87312b4 --- /dev/null +++ b/Examples/concurrency/mutex2.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.mutex2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/mutex2.dSYM/Contents/Resources/DWARF/mutex2 b/Examples/concurrency/mutex2.dSYM/Contents/Resources/DWARF/mutex2 new file mode 100644 index 0000000000000000000000000000000000000000..3482b4612470a322e6bc7df80169a9b6ea3f74f5 GIT binary patch literal 10678 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 literal 0 HcmV?d00001 diff --git a/Examples/concurrency/mutex3.c b/Examples/concurrency/mutex3.c index 7d6c2a9..ac1ca46 100644 --- a/Examples/concurrency/mutex3.c +++ b/Examples/concurrency/mutex3.c @@ -4,38 +4,40 @@ * locked */ +#include #include #include #include #include -#include // shared global static int counter1 = 0; static int counter2 = 0; -// start flag +// start flag volatile int start; // flag mutex pthread_mutex_t flag = PTHREAD_MUTEX_INITIALIZER; // The thread process -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 1000000; j++) { pthread_mutex_lock(&flag); - if(me == 0) { + if (me == 0) + { pthread_mutex_lock(&flag); } @@ -46,12 +48,11 @@ void* thread_routine(void* args) pthread_mutex_unlock(&flag); } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - // Main process int main() { @@ -60,22 +61,24 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); pthread_mutex_destroy(&flag); return EXIT_SUCCESS; diff --git a/Examples/concurrency/mutex3.dSYM/Contents/Info.plist b/Examples/concurrency/mutex3.dSYM/Contents/Info.plist new file mode 100644 index 0000000..29ad191 --- /dev/null +++ b/Examples/concurrency/mutex3.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.mutex3 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/mutex3.dSYM/Contents/Resources/DWARF/mutex3 b/Examples/concurrency/mutex3.dSYM/Contents/Resources/DWARF/mutex3 new file mode 100644 index 0000000000000000000000000000000000000000..626d7d9bfcb4a5aeeb0b02368ab8abb87ca1d832 GIT binary patch literal 10675 zcmeHNeQX>@6`#GmS>O5Wvwdz-hY;d64r!3Mvt5@sw(Ho5-Ns28r?&IaglbryH+PrZ zSN8T?n^?r^XOIXbty)2$0wDwy0;y1hQX)ld5u!p00Tr4Q+Nz4$2vHEIh$`YM{NC>D z`Fs}_!@um<@7}yOZ+`RU&F;+3>|XfWAOBUun4&VqYC%EJ@1StgYGhhKFZdtsUDejd z9{Bd)uPz_`?e{ySUa<}97*jz=J`mZnM#chQ^WdKZUj^C@5@OHbox=x*$3`JkBnPWP zSs@b6B^U}ZF??WRaiLv*V6o1XI5IAgP6*4GvE0&Xytn!g6ck@BbIQM9&X}Lgmy1Fa ztm0&$q^k7qrG5wRV?4n-I46;qTDyaX+a?1&;G%&JERrZFDh_aoucPxLPVnYQ~ace`cuYaF(J~atU={V z;hl0DZzZdxlZ&UDdNyGcs_;(z((!LVLY%s3X)G#n@#O7Ug?C=!b;_WhUnZVDIcXZx z)&0HpisN6i?C-U8%kvMDl5JQSzsRp0ytgG@Wc`1_)ARYXA+mY~(X00F{Z}2lmnF>m zAN?=z@_M||zjGHIyfz7QZo~5Mtl9i^{ktsjzAO8Cd6{^*$s=)UxzfK!Ut8?oqZ>ci zKd;n_fENKT0$v2X2zU|r|A_!S{)O>S@9r0xNXA31`@B#4f07@Zcb+HcF|0vx9pr*C)che^i4g8RI`OP0I)Yx_xcHa#WsW@=iu42FF}F>4uSM=95d zhnq}N7&At^Xc^cN>r>bgi^FL>!9+$+Wf}I~x@j?CB~26xGgq|aV>w#$k{1Cl0$v2X z2zU|jBH%^9i+~paF9Kc!ya;#^@FMV8?A873TL^@rD1Q&v6Qg}SNQv!AO`5tn8yhmF zjdTt#qGQ|eQcurL?ZWnYB9}`SV&g+Q3$eTO_~`h7XkqGTtXME(scbx5oHAmC*+L92 zJMB$5_W3d=>{lSsBsEdeWw5iK5tgI1gP3 ze4SeS5$CYppsC>l$n|NLd;x?6jk*UKXtZ15!P<9 z9paIn0c{75Xs2zyMtcnWFkhoxB(7aLYd3>$4&+Nv=QXR_(JS&gb$xhG%9SjN(;UC8 z4A_HM$LKSSUJ$*ar}Sx%i%Oq1_`UMJcejc#MhdNzlLr{HCD(mXqUQle5eZ8NsXfPJ}O#AMT|9-$6DEUfQq^$#>~AW^+?H@B&k{u{W)IIw8lFF|g=Len zKHSXJ@cnb)Kb;6S-ncs4q(n3feHR8{qn4*F$gYHeTU^_z8)>jxYqs6yj@vh^P&NQ|1-FY<+CFlM&>+1? zZjGn$BEEInFbk<%wzZ=x+8%9hy~WmkyrZifQnYh(w4=RqBP-2U|HFjI7UoVC+gm_$ zv3%}6VnasZsFlmdwvFG~-PI8rp3yV#s}PIlvhkv68rk?Pv(G@?8B)%n^y*(X@oi4! zEZ+LW+-+4@@jFY@VVCy9h!UlCy(5G zJjK4`Z=XLIis=9Rh_&~QH=l+5PeE^j{tBvt!|Omjpu0gy&~g4?cWhj3#SR+cP&~Z^W}dCN(W#q^5-c t*x$IN#~uw@M@dbKEIfI5|8YCaFG@8nwNNL2{&nhD>B6KMl&&|R{|4>n$(H~C literal 0 HcmV?d00001 diff --git a/Examples/concurrency/prod_cons1 b/Examples/concurrency/prod_cons1 new file mode 100755 index 0000000000000000000000000000000000000000..b425879a72d860ae135d4da22bec36503ed2a484 GIT binary patch literal 50656 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 literal 0 HcmV?d00001 diff --git a/Examples/concurrency/prod_cons1.c b/Examples/concurrency/prod_cons1.c index e24dc97..0c9f237 100644 --- a/Examples/concurrency/prod_cons1.c +++ b/Examples/concurrency/prod_cons1.c @@ -6,109 +6,117 @@ * a consumer might attempt to read when the space is empty */ -#include -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include #define BUFFER_SIZE 30 #define ELEMENTS 100 // Shared Buffer -typedef struct circular_buffer { - unsigned char values[BUFFER_SIZE]; - int out_idx; - int in_idx; +typedef struct circular_buffer +{ + unsigned char values[BUFFER_SIZE]; + int out_idx; + int in_idx; } circular_buffer; circular_buffer buffer; -void buffer_init(circular_buffer* b) +void buffer_init(circular_buffer *b) { - b->out_idx = 0; - b->in_idx = 0; - memset(b->values, 0, BUFFER_SIZE); + b->out_idx = 0; + b->in_idx = 0; + memset(b->values, 0, BUFFER_SIZE); } -void buffer_insert(circular_buffer* b, unsigned char value) +void buffer_insert(circular_buffer *b, unsigned char value) { - if(b->values[b->in_idx] != 0) { - printf("ERROR: Inserting into buffer when an element exists. Empty was expected\n"); - exit(EXIT_FAILURE); - } - b->values[b->in_idx] = value; - b->in_idx = b->in_idx < BUFFER_SIZE-1 ? b->in_idx + 1 : 0; + if (b->values[b->in_idx] != 0) + { + printf("ERROR: Inserting into buffer when an element exists. Empty was expected\n"); + exit(EXIT_FAILURE); + } + b->values[b->in_idx] = value; + b->in_idx = b->in_idx < BUFFER_SIZE - 1 ? b->in_idx + 1 : 0; } -unsigned char buffer_remove(circular_buffer* b) +unsigned char buffer_remove(circular_buffer *b) { - unsigned char return_value = b->values[b->out_idx]; - if(return_value == 0) { - printf("ERROR: Removing from a buffer at an empty element. Something was expected\n"); - exit(EXIT_FAILURE); - } - b->values[b->out_idx] = 0; - b->out_idx = b->out_idx < BUFFER_SIZE-1 ? b->out_idx + 1 : 0; - return return_value; + unsigned char return_value = b->values[b->out_idx]; + if (return_value == 0) + { + printf("ERROR: Removing from a buffer at an empty element. Something was expected\n"); + exit(EXIT_FAILURE); + } + b->values[b->out_idx] = 0; + b->out_idx = b->out_idx < BUFFER_SIZE - 1 ? b->out_idx + 1 : 0; + return return_value; } // Start flag volatile int start = 0; // Producer Routine -void* producer() +void *producer() { - // wait for start from master thread - while(!start); + // wait for start from master thread + while (!start) + ; - for(int i = 0; i < ELEMENTS; i++) { - // Add an element to the buffer - unsigned char value = (i % 100) + 1; // Make sure the value isn't zero - buffer_insert(&buffer, value); - printf("Producer added: %d\n", value); - } + for (int i = 0; i < ELEMENTS; i++) + { + // Add an element to the buffer + unsigned char value = (i % 100) + 1; // Make sure the value isn't zero + buffer_insert(&buffer, value); + printf("Producer added: %d\n", value); + } - return NULL; + return NULL; } // Consumer Routine -void* consumer() +void *consumer() { - // wait for start from master thread - while(!start); + // wait for start from master thread + while (!start) + ; - for(int i = 0; i < ELEMENTS; i++) { - // Remove an element from the buffer - printf("Consumer removed: %d\n", buffer_remove(&buffer)); - } + for (int i = 0; i < ELEMENTS; i++) + { + // Remove an element from the buffer + printf("Consumer removed: %d\n", buffer_remove(&buffer)); + } - return NULL; + return NULL; } - // Main process int main() { - buffer_init(&buffer); - - pthread_t prod; - pthread_t cons; - if(pthread_create(&prod, NULL, producer, NULL) == -1) { - printf("COULD NOT CREATE PRODUCER\n"); - exit(EXIT_FAILURE); - } - if(pthread_create(&cons, NULL, consumer, NULL) == -1) { - printf("COULD NOT CREATE CONSUMER\n"); - exit(EXIT_FAILURE); - } + buffer_init(&buffer); - start = 1; + pthread_t prod; + pthread_t cons; + if (pthread_create(&prod, NULL, producer, NULL) == -1) + { + printf("COULD NOT CREATE PRODUCER\n"); + exit(EXIT_FAILURE); + } + if (pthread_create(&cons, NULL, consumer, NULL) == -1) + { + printf("COULD NOT CREATE CONSUMER\n"); + exit(EXIT_FAILURE); + } - pthread_join(prod, NULL); - pthread_join(cons, NULL); + start = 1; - return EXIT_SUCCESS; + pthread_join(prod, NULL); + pthread_join(cons, NULL); + + return EXIT_SUCCESS; } diff --git a/Examples/concurrency/prod_cons1.dSYM/Contents/Info.plist b/Examples/concurrency/prod_cons1.dSYM/Contents/Info.plist new file mode 100644 index 0000000..146ba33 --- /dev/null +++ b/Examples/concurrency/prod_cons1.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.prod_cons1 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/prod_cons1.dSYM/Contents/Resources/DWARF/prod_cons1 b/Examples/concurrency/prod_cons1.dSYM/Contents/Resources/DWARF/prod_cons1 new file mode 100644 index 0000000000000000000000000000000000000000..e58008c4e3d3dc6b5e2467584dbdbdfec706dce2 GIT binary patch literal 11139 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 literal 0 HcmV?d00001 diff --git a/Examples/concurrency/prod_cons2 b/Examples/concurrency/prod_cons2 new file mode 100755 index 0000000000000000000000000000000000000000..048d1c4e7673d6b5ac2112c3cc9e3753006b6f84 GIT binary patch literal 51016 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 -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include #define BUFFER_SIZE 30 #define ELEMENTS 100 // Shared Buffer -typedef struct circular_buffer { - unsigned char values[BUFFER_SIZE]; - int out_idx; - int in_idx; +typedef struct circular_buffer +{ + unsigned char values[BUFFER_SIZE]; + int out_idx; + int in_idx; } circular_buffer; circular_buffer buffer; -void buffer_init(circular_buffer* b) +void buffer_init(circular_buffer *b) { - b->out_idx = 0; - b->in_idx = 0; - memset(b->values, 0, BUFFER_SIZE); + b->out_idx = 0; + b->in_idx = 0; + memset(b->values, 0, BUFFER_SIZE); } -void buffer_insert(circular_buffer* b, unsigned char value) +void buffer_insert(circular_buffer *b, unsigned char value) { - if(b->values[b->in_idx] != 0) { - printf("ERROR: Inserting into buffer when an element exists. Empty was expected\n"); - exit(EXIT_FAILURE); - } - b->values[b->in_idx] = value; - b->in_idx = b->in_idx < BUFFER_SIZE-1 ? b->in_idx + 1 : 0; + if (b->values[b->in_idx] != 0) + { + printf("ERROR: Inserting into buffer when an element exists. Empty was expected\n"); + exit(EXIT_FAILURE); + } + b->values[b->in_idx] = value; + b->in_idx = b->in_idx < BUFFER_SIZE - 1 ? b->in_idx + 1 : 0; } -unsigned char buffer_remove(circular_buffer* b) +unsigned char buffer_remove(circular_buffer *b) { - unsigned char return_value = b->values[b->out_idx]; - if(return_value == 0) { - printf("ERROR: Removing from a buffer at an empty element. Something was expected\n"); - exit(EXIT_FAILURE); - } - b->values[b->out_idx] = 0; - b->out_idx = b->out_idx < BUFFER_SIZE-1 ? b->out_idx + 1 : 0; - return return_value; + unsigned char return_value = b->values[b->out_idx]; + if (return_value == 0) + { + printf("ERROR: Removing from a buffer at an empty element. Something was expected\n"); + exit(EXIT_FAILURE); + } + b->values[b->out_idx] = 0; + b->out_idx = b->out_idx < BUFFER_SIZE - 1 ? b->out_idx + 1 : 0; + return return_value; } // Semaphores for controlling access @@ -64,73 +67,78 @@ sem_t emptyCount; volatile int start = 0; // Producer Routine -void* producer() +void *producer() { - // wait for start from master thread - while(!start); + // wait for start from master thread + while (!start) + ; - for(int i = 0; i < ELEMENTS; i++) { - // Wait for a free spot in the buffer - sem_wait(&emptyCount); + for (int i = 0; i < ELEMENTS; i++) + { + // Wait for a free spot in the buffer + sem_wait(&emptyCount); - // Add an element to the buffer - unsigned char value = (i % 100) + 1; // Make sure the value isn't zero - buffer_insert(&buffer, value); - printf("Producer added: %d\n", value); + // Add an element to the buffer + unsigned char value = (i % 100) + 1; // Make sure the value isn't zero + buffer_insert(&buffer, value); + printf("Producer added: %d\n", value); - // Signal the consumer that there something to consume - sem_post(&fullCount); - } + // Signal the consumer that there something to consume + sem_post(&fullCount); + } - return NULL; + return NULL; } // Consumer Routine -void* consumer() +void *consumer() { - // wait for start from master thread - while(!start); + // wait for start from master thread + while (!start) + ; - for(int i = 0; i < ELEMENTS; i++) { - // Wait for element to consume - sem_wait(&fullCount); + for (int i = 0; i < ELEMENTS; i++) + { + // Wait for element to consume + sem_wait(&fullCount); - // Remove an element from the buffer - printf("Consumer removed: %d\n", buffer_remove(&buffer)); + // Remove an element from the buffer + printf("Consumer removed: %d\n", buffer_remove(&buffer)); - // Signal the producer that there is a free spot - sem_post(&emptyCount); - } + // Signal the producer that there is a free spot + sem_post(&emptyCount); + } - return NULL; + return NULL; } - // Main process int main() { - sem_init(&fullCount, 0, 0); - sem_init(&emptyCount, 0, BUFFER_SIZE); - buffer_init(&buffer); - - pthread_t prod; - pthread_t cons; - if(pthread_create(&prod, NULL, producer, NULL) == -1) { - printf("COULD NOT CREATE PRODUCER\n"); - exit(EXIT_FAILURE); - } - if(pthread_create(&cons, NULL, consumer, NULL) == -1) { - printf("COULD NOT CREATE CONSUMER\n"); - exit(EXIT_FAILURE); - } + sem_init(&fullCount, 0, 0); + sem_init(&emptyCount, 0, BUFFER_SIZE); + buffer_init(&buffer); - start = 1; + pthread_t prod; + pthread_t cons; + if (pthread_create(&prod, NULL, producer, NULL) == -1) + { + printf("COULD NOT CREATE PRODUCER\n"); + exit(EXIT_FAILURE); + } + if (pthread_create(&cons, NULL, consumer, NULL) == -1) + { + printf("COULD NOT CREATE CONSUMER\n"); + exit(EXIT_FAILURE); + } - pthread_join(prod, NULL); - pthread_join(cons, NULL); + start = 1; - sem_destroy(&fullCount); - sem_destroy(&emptyCount); + pthread_join(prod, NULL); + pthread_join(cons, NULL); - return EXIT_SUCCESS; + sem_destroy(&fullCount); + sem_destroy(&emptyCount); + + return EXIT_SUCCESS; } diff --git a/Examples/concurrency/prod_cons2.dSYM/Contents/Info.plist b/Examples/concurrency/prod_cons2.dSYM/Contents/Info.plist new file mode 100644 index 0000000..c0182b8 --- /dev/null +++ b/Examples/concurrency/prod_cons2.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.prod_cons2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/prod_cons2.dSYM/Contents/Resources/DWARF/prod_cons2 b/Examples/concurrency/prod_cons2.dSYM/Contents/Resources/DWARF/prod_cons2 new file mode 100644 index 0000000000000000000000000000000000000000..ba6b269f97698dcd6a3889aa3e17153b7fdc93c5 GIT binary patch literal 11415 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 g&a}f$7USu- #include #include #include #include -#include -// start flag -volatile int start = 0; + // start flag + volatile int start = 0; // shared global static int counter1 = 0; static int counter2 = 0; -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *)args); - int you = me ? 0 : 1; + int me = *((int *)args); + int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n", me, you); + printf("Worker thread: %d ready, you are %d\n", me, you); - // wait for start from master thread - while(!start); + // wait for start from master thread + while (!start) + ; - for (int j = 0; j < 100000000; j++) - { - // this is the critical section - counter1++; - counter2++; - // leaving critical section - } + for (int j = 0; j < 100000000; j++) + { + // this is the critical section + counter1++; + counter2++; + // leaving critical section + } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); - return NULL; + return NULL; } int main() { - int val1 = 0; - int val2 = 1; - - pthread_t thr1; - pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { - printf("COULD NOT CREATE A THREAD\n"); - exit(EXIT_FAILURE); - } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { - printf("COULD NOT CREATE A THREAD\n"); - exit(EXIT_FAILURE); - } + int val1 = 0; + int val2 = 1; - start = 1; + pthread_t thr1; + pthread_t thr2; + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { + printf("COULD NOT CREATE A THREAD\n"); + exit(EXIT_FAILURE); + } + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { + printf("COULD NOT CREATE A THREAD\n"); + exit(EXIT_FAILURE); + } - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + start = 1; - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); - return EXIT_SUCCESS; + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); + + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); + return EXIT_SUCCESS; } - diff --git a/Examples/concurrency/race.dSYM/Contents/Info.plist b/Examples/concurrency/race.dSYM/Contents/Info.plist new file mode 100644 index 0000000..7221399 --- /dev/null +++ b/Examples/concurrency/race.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.race + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/race.dSYM/Contents/Resources/DWARF/race b/Examples/concurrency/race.dSYM/Contents/Resources/DWARF/race new file mode 100644 index 0000000000000000000000000000000000000000..3cafe76ba11322f6dc0c09cceb4b80829d750cb1 GIT binary patch literal 10323 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 T-fM4X;sd)yiUCj`rEvc@gsqTM literal 0 HcmV?d00001 diff --git a/Examples/concurrency/sem1.c b/Examples/concurrency/sem1.c index 297fa70..efd728d 100644 --- a/Examples/concurrency/sem1.c +++ b/Examples/concurrency/sem1.c @@ -3,34 +3,35 @@ * critical section */ +#include +#include #include #include #include #include -#include -#include // shared global static int counter1 = 0; static int counter2 = 0; -// start flag +// start flag volatile int start; // flag semaphore sem_t flag; // The thread process -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 1000000; j++) { @@ -42,39 +43,40 @@ void* thread_routine(void* args) sem_post(&flag); } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - // Main process int main() { int val1 = 0; int val2 = 1; - + // Initialize the semaphore - initial value of 1 sem_init(&flag, 0, 1); pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); // Destroy the semaphore sem_destroy(&flag); diff --git a/Examples/concurrency/sem1.dSYM/Contents/Info.plist b/Examples/concurrency/sem1.dSYM/Contents/Info.plist new file mode 100644 index 0000000..30a46b1 --- /dev/null +++ b/Examples/concurrency/sem1.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.sem1 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/sem1.dSYM/Contents/Resources/DWARF/sem1 b/Examples/concurrency/sem1.dSYM/Contents/Resources/DWARF/sem1 new file mode 100644 index 0000000000000000000000000000000000000000..df142958b351d00e36304c83f9398e6cab433fb3 GIT binary patch literal 10495 zcmeHNU2GiH6~42xcf9Mhcl|?x(-dKn&;+%3ZP(<-IKd`%vB416Hjp?-H{cl`2&uoKRTa?|`kk4% z_IlTDP1U!~mCu}e&OP_L=bk%zJagy1`u-n2s9{V|8Dq7eDCk`%WZ8;J3+TZIW)2@!dDS-0ABT*RYN;6@(H3kv(f*ECRLw{s8zE&>%>Nk-j?yCI&_iL8vGm zR)w-cB%Dhy6k>ef@c8ORw}08#l1L|nW6V0TwHoh24}yZ`Uza%*UNL7Z%ofT; zA#A5KX)miP{d?|!hu6Mr;mJ~r_;{MH@bE;&$Q2C>x=OrDKHf1208X)AE>-@eY{$x) zY2Tm{Z|`lMKV>0VhN8+UY{){C%#&GjN@UIHf-A3HkLP_nT60+{F{GY2t?QE@A^Q8q z`^3RR_l$X~+v~>(e62$FEfFmfZZ-5z7s}_b9v6VK6JpX{ zxqGYe2G_tVU(d3ii3=!1s*ukYOgTYp#rDXYx>X+AjO~JC)WV+HzrGIk;|F}S+0k7P7dBm zR_hmur(3$2HtZ_AbHDKXYxg0}-LO6uwMabw=UIh!*~fd|_wVus@$|__%b2O2@6v0Y zf3-f|()Nw{hos~hR>tq`UwL?6_wnA|@t^SYVlih3Q_mxM)&4DB^zhF6FpHn~2zW(3 zRq5Zzl7}bV8riuqJZG-Brhkr)m-grDY!I(7c|1iUSNiwHrPcnuvFqRa7qkWu2qF+f zAc#N^fgl3^KM|m3_&A<%<@-V-$#}?>&-?WLPxA1B_dIbUiqWYeR{K9aFL?DPj5P@&vT|LZxi$Exf^7nW>F?z2DDaqmNq@`PP$$n$T$QAG*I(ZNu z^>lM;7_Zmkg+k6wj`iPVC-2r%hsF-K*;6NyCEH47%~Y;5WhCu6oBa|QFu%3OFXXK$)jyNp&j5+ z?LFQFzDMifyoc9muk)DpMb6K_D6)-Tt2vxIu*&epA70_ncldU7?gyO1WT&Rq9!9N4 zyTsWdkJer(aek6_MLKx|__s%TIR2tqI+EmF6V|4uHZRo6Xg`|%WETrPQBz>HuSkm8SI_x#&eosx? zsfn>Vxd+ARX1?!_)YRo;%>IR>-M-{pC25Z@W&TN0&j@;9v|}Oay`Ln;kK$Sb3SZBs z!5Ts8O#KP4_zqlHtC~*iM&&7L$go5Y__I{cMiRr|zoGi^1{S^-6&|Vo8d$>wE-mW5 z#7Xd9g4Ax7co3XIq23xvJcPOn($m1|mmoAYQ4?$a9qQM-hs&R@XW=h^Ys#ia!6G$G zX;f~EH*+<9W
  • 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 +#include #include #include #include #include -#include -#include // shared global static int counter1 = 0; static int counter2 = 0; -// start flag +// start flag volatile int start; // flag semaphore sem_t flag; // The thread process -void* thread_routine(void* args) +void *thread_routine(void *args) { - int me = *((int *) args); + int me = *((int *)args); int you = me ? 0 : 1; - printf("Worker thread: %d ready, you are %d\n",me,you); + printf("Worker thread: %d ready, you are %d\n", me, you); // wait for start from master thread - while(!start); + while (!start) + ; for (int j = 0; j < 100000000; j++) { @@ -42,17 +43,17 @@ void* thread_routine(void* args) // leaving critical section sem_post(&flag); - if(me == 0) { + if (me == 0) + { sem_post(&flag); } } - printf("Worker thread: %d done\n",me); + printf("Worker thread: %d done\n", me); return NULL; } - // Main process int main() { @@ -63,22 +64,24 @@ int main() pthread_t thr1; pthread_t thr2; - if(pthread_create(&thr1, NULL, thread_routine, (void*)&val1) == -1) { + if (pthread_create(&thr1, NULL, thread_routine, (void *)&val1) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } - if(pthread_create(&thr2, NULL, thread_routine, (void*)&val2) == -1) { + if (pthread_create(&thr2, NULL, thread_routine, (void *)&val2) == -1) + { printf("COULD NOT CREATE A THREAD\n"); exit(EXIT_FAILURE); } start = 1; - pthread_join(thr1,NULL); - pthread_join(thr2,NULL); + pthread_join(thr1, NULL); + pthread_join(thr2, NULL); - printf("counter1: %d\n",counter1); - printf("counter2: %d\n",counter2); + printf("counter1: %d\n", counter1); + printf("counter2: %d\n", counter2); sem_destroy(&flag); return EXIT_SUCCESS; diff --git a/Examples/concurrency/sem2.dSYM/Contents/Info.plist b/Examples/concurrency/sem2.dSYM/Contents/Info.plist new file mode 100644 index 0000000..8fbeb0b --- /dev/null +++ b/Examples/concurrency/sem2.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.sem2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/sem2.dSYM/Contents/Resources/DWARF/sem2 b/Examples/concurrency/sem2.dSYM/Contents/Resources/DWARF/sem2 new file mode 100644 index 0000000000000000000000000000000000000000..8c02e5b0e97d81cd0c50b77cd7fb0ad2fc293757 GIT binary patch literal 10541 zcmeHNZ)_Y#6`#GmS>Ji>JO61?TOq0&IiwM)&o*unCnmKUyR}od3AURi4$^deUf*4E zw|DIBIkp-#rU*43P(`SU+Cr?#9UoJKNr5)GK zS((6~8gI|-zCRTqS%#v@Ds0F?l&w=aYgXi}xuPepUXO1Ec(mrSRAWdzaaz|WKtc=; zO$~_yhwh#9S9dUo6Zl$%?pq>SCfsW1pD9+(VLd#$H)WyzvQYdh+sLo80QYgE75LJ| z{F3*K5P3s5i-nnDUX)yWUA)1HAu9c%pCtV@Wf5Z5a1ANd`Zu`b`&T)aO1zbxeocrO zXXWm##T#7%uW~&rekLBE5b0u}P_*PY)$u$00r6Jy$N1R2caIE@`F96n-w)P-7N1JM zU-KpJzNqw#aM}FVDSmPd5Px%~oDun)Ws>E3c$ehh z9b~nBk$8q}SQ*o)!MpTx-@m~C;?m9QV^NF53x1w8c={_o-n)T+`nHYX88b7sIbS

    o7{HwW@CU#v z8R=^O9=hV=$!R{cV`F&kVrfnPo(u3Y!F-?FAYO6iM4Cpf_AmbGYX9Op|Gj@khg|u*Pw)REk1zSp6Z9CCRQ!i*dQ|Br85;-k zc^&3%OAuG%U zGhKE~yb>F;cqJBdc_YI_!N^$*@7{*(GT~-zGzz;|c7w-qj24zK0$~Kg2!s&`BM?R) zj6fKHFalu&!U%*B2qO?i;3s%jkFwt)5Q?JwJ<&*v-s?e1YCJb%8}?#q*qk@>MSO@( z9l%FD!-AKzn0Hc>!*@HWdyMp<$)jD)?8#Kwu~RuKoiERtDQD4P{{xH^KA3th z_KZ1Zp|{KX-hrA?$`)<2D@(pg6XAVdfe!l`D>`4s$GeE!c2L_D-d6t-PiO~uyo)Eb z{XDL{!~4K@YXh7Q@CNNwu4|v;{9zcyw(%P^mva|ZS>Al%8jruplNVrgkT+@>&M)xo zs(X}kbl9P(391cfS0gcm6Qjz_5Vc?7@%n3J&gXewte3~o{f^iG$6s8_#8SL(x>lzj z=Pf@4-a+1?o%8rs?epMse5-baxOVj=Zy=ml2tL#MAARLq-wy6_=>@0tU8DRB`lzRm zdAC3VqeC9F!BYsV7r-Sd9gK*49g4d^N^4w|J3K0F@kC$1g-0Xb2FsGc=C~@ih&UO% z2#S0}`yLpHN;0mFE`g)2U6jhExGMLZ>SA(WnvQY=pF^3_{xq)f$hn0#mZkd0Irkb# zTL>0X=`E7BlB6etO)2_7h^GASsHu~h7;C5uk8

    )YKnfEc}_IeSzd&Cuty%vi~G$ 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 +#include #include #include #include #include -#include -#include -typedef struct node { - int val; - struct node* next; +typedef struct node +{ + int val; + struct node *next; } node; -typedef struct list { - node* head; +typedef struct list +{ + node *head; } list; // shared global @@ -26,65 +28,71 @@ static list mylist; volatile int start = 0; // The thread process -void* thread_routine() +void *thread_routine() { - printf("Worker thread: %lu ready\n", pthread_self()); - - // wait for start from master thread - while(start == 0); + printf("Worker thread: %lu ready\n", pthread_self()); - for (int j = 0; j < 1000000; j++) - { - node* new_node = malloc(sizeof(node)); - new_node->val = j; - new_node->next = mylist.head; - mylist.head = new_node; - } + // wait for start from master thread + while (start == 0) + ; - printf("Worker thread: %lu done\n", pthread_self()); + for (int j = 0; j < 1000000; j++) + { + node *new_node = malloc(sizeof(node)); + new_node->val = j; + new_node->next = mylist.head; + mylist.head = new_node; + } - return NULL; + printf("Worker thread: %lu done\n", pthread_self()); + + return NULL; } // Main process int main() { - #define THREAD_COUNT 10 - pthread_t thr_ids[THREAD_COUNT]; +#define THREAD_COUNT 10 + pthread_t thr_ids[THREAD_COUNT]; + + mylist.head = NULL; - mylist.head = NULL; - // Create the threads - for(int i = 0; i < THREAD_COUNT; i++) { - if(pthread_create(&thr_ids[i], NULL, thread_routine, NULL) == -1) { - printf("COULD NOT CREATE A THREAD\n"); - exit(EXIT_FAILURE); - } - } + for (int i = 0; i < THREAD_COUNT; i++) + { + if (pthread_create(&thr_ids[i], NULL, thread_routine, NULL) == -1) + { + printf("COULD NOT CREATE A THREAD\n"); + exit(EXIT_FAILURE); + } + } // Signal threads to start - start = 1; + start = 1; // Wait for all threads to finish - for(int i = 0; i < THREAD_COUNT; i++) { - pthread_join(thr_ids[i],NULL); - } + for (int i = 0; i < THREAD_COUNT; i++) + { + pthread_join(thr_ids[i], NULL); + } // Count the elements in the list - int length = 0; - node* itr = mylist.head; - while(itr != NULL) { - length++; - itr = itr->next; - } - printf("List contains %d elements\n", length); + int length = 0; + node *itr = mylist.head; + while (itr != NULL) + { + length++; + itr = itr->next; + } + printf("List contains %d elements\n", length); // Free the list - while(mylist.head != NULL) { - node* to_delete = mylist.head; + while (mylist.head != NULL) + { + node *to_delete = mylist.head; mylist.head = mylist.head->next; free(to_delete); - } + } - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/Examples/concurrency/sem_list1.dSYM/Contents/Info.plist b/Examples/concurrency/sem_list1.dSYM/Contents/Info.plist new file mode 100644 index 0000000..12b931b --- /dev/null +++ b/Examples/concurrency/sem_list1.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.sem_list1 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/sem_list1.dSYM/Contents/Resources/DWARF/sem_list1 b/Examples/concurrency/sem_list1.dSYM/Contents/Resources/DWARF/sem_list1 new file mode 100644 index 0000000000000000000000000000000000000000..1fafc191984f5ce3fcf7a605b4ba38545e6b7075 GIT binary patch literal 10633 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 VA8YFz*ps^zX%+9_75Leze*+U&2{!-$ literal 0 HcmV?d00001 diff --git a/Examples/concurrency/sem_list2.c b/Examples/concurrency/sem_list2.c index cadbb59..51c66f5 100644 --- a/Examples/concurrency/sem_list2.c +++ b/Examples/concurrency/sem_list2.c @@ -1,22 +1,24 @@ -/* - * sem_list2.c - Uses a semaphore as a way to control access - * to a critical section for a singly linked list - */ +s /* + * sem_list2.c - Uses a semaphore as a way to control access + * to a critical section for a singly linked list + */ +#include +#include #include #include #include #include -#include -#include -typedef struct node { - int val; - struct node* next; + typedef struct node +{ + int val; + struct node *next; } node; -typedef struct list { - node* head; +typedef struct list +{ + node *head; } list; // shared global @@ -29,71 +31,77 @@ volatile int start = 0; sem_t flag; // The thread process -void* thread_routine() +void *thread_routine() { - printf("Worker thread: %lu ready\n", pthread_self()); - - // wait for start from master thread - while(start == 0); + printf("Worker thread: %lu ready\n", pthread_self()); - for (int j = 0; j < 1000000; j++) - { - sem_wait(&flag); - node* new_node = malloc(sizeof(node)); - new_node->val = j; - new_node->next = mylist.head; - mylist.head = new_node; - sem_post(&flag); - } + // wait for start from master thread + while (start == 0) + ; - printf("Worker thread: %lu done\n", pthread_self()); + for (int j = 0; j < 1000000; j++) + { + sem_wait(&flag); + node *new_node = malloc(sizeof(node)); + new_node->val = j; + new_node->next = mylist.head; + mylist.head = new_node; + sem_post(&flag); + } - return NULL; + printf("Worker thread: %lu done\n", pthread_self()); + + return NULL; } // Main process int main() { - sem_init(&flag, 0, 1); + sem_init(&flag, 0, 1); - #define THREAD_COUNT 10 - pthread_t thr_ids[THREAD_COUNT]; +#define THREAD_COUNT 10 + pthread_t thr_ids[THREAD_COUNT]; + + mylist.head = NULL; - mylist.head = NULL; - // Create the threads - for(int i = 0; i < THREAD_COUNT; i++) { - if(pthread_create(&thr_ids[i], NULL, thread_routine, NULL) == -1) { - printf("COULD NOT CREATE A THREAD\n"); - exit(EXIT_FAILURE); - } - } + for (int i = 0; i < THREAD_COUNT; i++) + { + if (pthread_create(&thr_ids[i], NULL, thread_routine, NULL) == -1) + { + printf("COULD NOT CREATE A THREAD\n"); + exit(EXIT_FAILURE); + } + } // Signal threads to start - start = 1; + start = 1; // Wait for all threads to finish - for(int i = 0; i < THREAD_COUNT; i++) { - pthread_join(thr_ids[i],NULL); - } + for (int i = 0; i < THREAD_COUNT; i++) + { + pthread_join(thr_ids[i], NULL); + } // Count the elements in the list - int length = 0; - node* itr = mylist.head; - while(itr != NULL) { - length++; - itr = itr->next; - } - printf("List contains %d elements\n", length); + int length = 0; + node *itr = mylist.head; + while (itr != NULL) + { + length++; + itr = itr->next; + } + printf("List contains %d elements\n", length); // Free the list - while(mylist.head != NULL) { - node* to_delete = mylist.head; + while (mylist.head != NULL) + { + node *to_delete = mylist.head; mylist.head = mylist.head->next; free(to_delete); - } - + } + sem_destroy(&flag); - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/Examples/concurrency/sem_list2.dSYM/Contents/Info.plist b/Examples/concurrency/sem_list2.dSYM/Contents/Info.plist new file mode 100644 index 0000000..545b887 --- /dev/null +++ b/Examples/concurrency/sem_list2.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.sem_list2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/concurrency/sem_list2.dSYM/Contents/Resources/DWARF/sem_list2 b/Examples/concurrency/sem_list2.dSYM/Contents/Resources/DWARF/sem_list2 new file mode 100644 index 0000000000000000000000000000000000000000..9cb3041ba434b4da720878f6e8c5e9c195e5888f GIT binary patch literal 10833 zcmeHNeQX>@6`#GmS?~Gm^Z6r=OQ5|rZk;xY&vsnWq;6^xJGC9RNo*%g(v->iyuLeU zeRtgMIkD=>ZX&=!MXi;#N*yRvLI{aM5dx%AfdW+pLP9|V+5`wx0tyn1_z<898sPW# z!#wLvyp%nD&z zg%NX6RO;X4P6v--;FaR>sxF@5DjhtL(v6&+hpZIuyo)#IfuSvObrt^-rj<`;l8gAu z`|bZWX-Z@s{E(<&S~B2ln)I_c^PBvGeXccoXWj z5Zi@tim?c%0Ucp{4|Waic8uuv2PHT$N41}lA_~Qy{G%YU(aydg68Epd5Tj}4z>ki%vF3dvH ze}I?M5~cp_zU1I}!`!`TZFtsHZdL!rUA$M^@s6(%FFP`xpq@+p+wzm;{%yJA-Tm{m zegymo_!00U;77oZ!2eGK=))ecFC9oiav6E}x#%ES-soDI;xKcz~Hm3H_v=C|EjPd$m!# z_KGn>OTt1+XBghEwLHwMR31u^&lW8A(HlMZ#gBj=0Y3tM1pEm25%446N5GGO9|1oC zegymo_z`%w2yDa#K#=_gCXyumJyJ;xz2~D!@qzS6UdvC#yY)%k$l^nEd>1|vYMIdi zym}93vxXTT>fU3<@7EH0hYmHHqsQX~GapZ95=LQEkDF5_`yXJ$@xj!7>1WK;C-BA1 zwAz~Oj~-yPTq>K_n^WYlXD95BERbPrOEQPY7rcPC7a_+a-c){?2b5D>RW9?0GR6ZP zJgj_?*C`ecSX@?8yzXTlQl8_r${w&Cyty;!|lwa|kYBNV4K_#iidEf|d z9I^pb&3K)UKE8tE*IRuB3^B7J)FY5>2%QqcG(}7W4 zMth3C7YHGk-w5+YwCnm|T!4tI4{-iL9tdo#<4lpCn|UEnh9O{g$30$vy&@DZgfH9N z()Q0Yw02f0kJ-zN6soFQ6rG zDZ1Nb<{NGiQABzrqw3YlLa?dI~Z=Q+hgI`~Wajr|qyr{rmW%#SJ~<)pK_D~jAR1vVr<>4w;OAhaNOfO8qhc9XOSeX9xg0q)9r^uCB)Wb>q*|&`FoW$(j`Y>ud&7?K-Qhq3 zdbpGIVYLJsA>SDehvAoF;u$FQFpwj}!r59$j)cPwqgL8j#M}j4sLDnvuYzykW_VDe zbT&8_Qiqs@ur0()wzI&Z1_O~Ka-r>)z!KQM(iFbW*)eYQnWO+y<|;ZE(7&j{FUW zcfy>pF8UrGOBgs$5S!HVW;&aRwYE36G`GYy+0reo?JeM%+qO5iwzS>8EV=#{X`3zG z1z7xmi5}y*>OZN00#HQsYln}BO(Jdw>L3i-UANlY7}n7bcr zZwk{sFw0~|bvCIPEJG)@>@8us4_K^ZD|j3RCxmTn?-)ZZ(xWCb^i0x9u{2H^q?wh) z!3{&l#T87(!GL-Y)<=7K`)jFGmX7ykuY>EQ^?VFbmBO8$B-FW9IaXb zl)}Bz(DNd%C!qB9tcB3>WNeQok<#ciP}ksK*I_Z#cce!QAKup^1nV8@>czTUJhfIq zlZrwziDA{EV42&eQi5pziPCiScafRbo|zt>S(v`qr$s+tz4P=@=nT|p)W=ajfof+r zv_q&=D8CWzH;F;9(+%2I5~5HpCX$ji6+6M9{e{ipWS{G+Yrc4big@yseDiE*aZ<&< znO(?tvXL=T4vpfDjjo~bQA>qJT;}q03I`u4Y+WMu^z@zah3PlGyZ`=gpW7g``i1F- z%*TKB>PK&RB+Z@;w#?3jztMR(`uW}GroV)1zJp4s;xDKbaIhJ*2lXhbiTW{A$}W^U z@W&{j;FQOMuRn4I9HS&fV#;O^-~Q&TEv5uWVoHqlj19jXOp!GuLlRStg!pR{pM0Cd z=TT{FWCQVm@6VnwLDo7XC`KuZE~HF`ZZ4ee{Va(oEs~gWB&=ULvIA#va3gialyo7! zlE}P5V!Bb1HDz>wd}h-Qdl6l6#TU_{_tw|ygP`m?A~{93NQggm?XfdwK?09RP-~jz Fe*tXA(GUOt literal 0 HcmV?d00001