Changes in / [6f9f338:8b639f9]
- File:
-
- 1 edited
-
tests/concurrency/unified_locking/locks.cfa (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tests/concurrency/unified_locking/locks.cfa
r6f9f338 r8b639f9 1 #include < fstream.hfa>1 #include <stdio.h> 2 2 #include <locks.hfa> 3 3 #include <stdlib.hfa> 4 4 #include <thread.hfa> 5 5 6 const unsigned int num_times = 20_000;6 const unsigned int num_times = 50000; 7 7 8 8 multiple_acquisition_lock m; … … 24 24 25 25 void main( T_C_M_WS1 & ) { 26 for ( unsigned int i = 0; i < num_times; i++) {27 lock( m);28 if ( empty( c_m ) && i != num_times - 1) {29 wait( c_m,m);30 } else{31 notify_one( c_m);32 } // for33 unlock( m);34 } // for35 } // main26 for (unsigned int i = 0; i < num_times; i++) { 27 lock(m); 28 if(empty(c_m) && i != num_times - 1) { 29 wait(c_m,m); 30 }else{ 31 notify_one(c_m); 32 } 33 unlock(m); 34 } 35 } 36 36 37 37 thread T_C_M_WB1 {}; 38 38 39 39 void main( T_C_M_WB1 & ) { 40 for ( unsigned int i = 0; i < num_times; i++) {41 lock( m);42 if ( counter( c_m ) == 3 || i == num_times - 1) {43 notify_all( c_m);44 } else{45 wait( c_m,m);46 } // if47 unlock( m);48 } // for49 } // main40 for (unsigned int i = 0; i < num_times; i++) { 41 lock(m); 42 if(counter(c_m) == 3 || i == num_times - 1) { 43 notify_all(c_m); 44 }else{ 45 wait(c_m,m); 46 } 47 unlock(m); 48 } 49 } 50 50 51 51 thread T_C_S_WS1 {}; 52 52 53 53 void main( T_C_S_WS1 & ) { 54 for ( unsigned int i = 0; i < num_times; i++) {55 lock( s);56 if ( empty( c_s ) && i != num_times - 1) {57 wait( c_s,s);58 } else{59 notify_one( c_s);60 } // if61 unlock( s);62 } // for63 } // main54 for (unsigned int i = 0; i < num_times; i++) { 55 lock(s); 56 if(empty(c_s) && i != num_times - 1) { 57 wait(c_s,s); 58 }else{ 59 notify_one(c_s); 60 } 61 unlock(s); 62 } 63 } 64 64 65 65 thread T_C_S_WB1 {}; 66 66 67 67 void main( T_C_S_WB1 & ) { 68 for ( unsigned int i = 0; i < num_times; i++) {69 lock( s);70 if ( counter( c_s ) == 3 || i == num_times - 1) {71 notify_all( c_s);72 } else{73 wait( c_s,s);74 } // if75 unlock( s);76 } // for77 } // main68 for (unsigned int i = 0; i < num_times; i++) { 69 lock(s); 70 if(counter(c_s) == 3 || i == num_times - 1) { 71 notify_all(c_s); 72 }else{ 73 wait(c_s,s); 74 } 75 unlock(s); 76 } 77 } 78 78 79 79 thread T_C_L_WS1 {}; 80 80 81 81 void main( T_C_L_WS1 & ) { 82 for ( unsigned int i = 0; i < num_times; i++) {83 lock( l);84 if ( empty( c_l ) && i != num_times - 1) {85 wait( c_l,l);86 } else{87 notify_one( c_l);88 } // if89 unlock( l);90 } // for91 } // main82 for (unsigned int i = 0; i < num_times; i++) { 83 lock(l); 84 if(empty(c_l) && i != num_times - 1) { 85 wait(c_l,l); 86 }else{ 87 notify_one(c_l); 88 } 89 unlock(l); 90 } 91 } 92 92 93 93 thread T_C_L_WB1 {}; 94 94 95 95 void main( T_C_L_WB1 & ) { 96 for ( unsigned int i = 0; i < num_times; i++) {97 lock( l);98 if ( counter( c_l ) == 3 || i == num_times - 1) {99 notify_all( c_l);100 } else{101 wait( c_l,l);102 } // if103 unlock( l);104 } // for105 } // main96 for (unsigned int i = 0; i < num_times; i++) { 97 lock(l); 98 if(counter(c_l) == 3 || i == num_times - 1) { 99 notify_all(c_l); 100 }else{ 101 wait(c_l,l); 102 } 103 unlock(l); 104 } 105 } 106 106 107 107 thread T_F_C_F_WS1 {}; 108 108 109 109 void main( T_F_C_F_WS1 & ) { 110 for ( unsigned int i = 0; i < num_times; i++) {111 lock( f);112 if ( empty( f_c_f ) && i != num_times - 1) {113 wait( f_c_f,f);114 } else{115 notify_one( f_c_f);116 } // if117 unlock( f);118 } // for119 } // main110 for (unsigned int i = 0; i < num_times; i++) { 111 lock(f); 112 if(empty(f_c_f) && i != num_times - 1) { 113 wait(f_c_f,f); 114 }else{ 115 notify_one(f_c_f); 116 } 117 unlock(f); 118 } 119 } 120 120 121 121 thread T_C_O_WS1 {}; 122 122 123 123 void main( T_C_O_WS1 & ) { 124 for ( unsigned int i = 0; i < num_times; i++) {125 lock( o);126 if ( empty( c_o ) && i != num_times - 1) {127 wait( c_o,o);128 } else{129 notify_one( c_o);130 } // if131 unlock( o);132 } // for133 } // main124 for (unsigned int i = 0; i < num_times; i++) { 125 lock(o); 126 if(empty(c_o) && i != num_times - 1) { 127 wait(c_o,o); 128 }else{ 129 notify_one(c_o); 130 } 131 unlock(o); 132 } 133 } 134 134 135 135 thread T_C_O_WB1 {}; 136 136 137 137 void main( T_C_O_WB1 & ) { 138 for ( unsigned int i = 0; i < num_times; i++) {139 lock( o);140 if ( counter( c_o ) == 3 || i == num_times - 1) {141 notify_all( c_o);142 } else{143 wait( c_o,o);144 } // if145 unlock( o);146 } // for147 } // main138 for (unsigned int i = 0; i < num_times; i++) { 139 lock(o); 140 if(counter(c_o) == 3 || i == num_times - 1) { 141 notify_all(c_o); 142 }else{ 143 wait(c_o,o); 144 } 145 unlock(o); 146 } 147 } 148 148 149 149 thread T_C_M_WS2 {}; 150 150 151 151 void main( T_C_M_WS2 & ) { 152 for ( unsigned int i = 0; i < num_times; i++) {153 lock( m);154 lock( m);155 lock( m);156 if ( empty( c_m ) && i != num_times - 1) {157 wait( c_m,m);158 } else{159 notify_one( c_m);160 } // if161 unlock( m);162 unlock( m);163 unlock( m);164 } // for165 } // main152 for (unsigned int i = 0; i < num_times; i++) { 153 lock(m); 154 lock(m); 155 lock(m); 156 if(empty(c_m) && i != num_times - 1) { 157 wait(c_m,m); 158 }else{ 159 notify_one(c_m); 160 } 161 unlock(m); 162 unlock(m); 163 unlock(m); 164 } 165 } 166 166 167 167 thread T_C_O_WS2 {}; 168 168 169 169 void main( T_C_O_WS2 & ) { 170 for ( unsigned int i = 0; i < num_times; i++) {171 lock( o);172 lock( o);173 lock( o);174 if ( empty( c_o ) && i != num_times - 1) {175 wait( c_o,o);176 } else{177 notify_one( c_o);178 } // if179 unlock( o);180 unlock( o);181 unlock( o);182 } // for183 } // main170 for (unsigned int i = 0; i < num_times; i++) { 171 lock(o); 172 lock(o); 173 lock(o); 174 if(empty(c_o) && i != num_times - 1) { 175 wait(c_o,o); 176 }else{ 177 notify_one(c_o); 178 } 179 unlock(o); 180 unlock(o); 181 unlock(o); 182 } 183 } 184 184 185 185 thread T_C_NLW {}; 186 186 187 187 void main( T_C_NLW & ) { 188 for ( unsigned int i = 0; i < num_times; i++) {189 wait( c_o);190 } // for191 } // main188 for (unsigned int i = 0; i < num_times; i++) { 189 wait(c_o); 190 } 191 } 192 192 193 193 thread T_C_NLS {}; 194 194 195 195 void main( T_C_NLS & ) { 196 for ( unsigned int i = 0; i < num_times; i++) {197 while ( empty( c_o)) { }198 notify_one( c_o);199 } // for200 } // main196 for (unsigned int i = 0; i < num_times; i++) { 197 while (empty(c_o)) { } 198 notify_one(c_o); 199 } 200 } 201 201 202 202 thread T_C_S_WNF {}; 203 203 204 204 void main( T_C_S_WNF & ) { 205 for ( unsigned int i = 0; i < num_times; i++) {206 lock( s);207 if ( empty( c_s ) && i != num_times - 1) {208 wait( c_s, s, 10);209 } else{210 if (!empty( c_s )) assert( front( c_s ) == 10);211 notify_one( c_s);212 } // if213 unlock( s);214 } // for215 } // main205 for (unsigned int i = 0; i < num_times; i++) { 206 lock(s); 207 if(empty(c_s) && i != num_times - 1) { 208 wait(c_s, s, 10); 209 }else{ 210 if(!empty(c_s)) assert(front(c_s) == 10); 211 notify_one(c_s); 212 } 213 unlock(s); 214 } 215 } 216 216 217 217 bool done = false; … … 221 221 void main( T_C_NLWD & ) { 222 222 done = false; 223 for ( unsigned int i = 0; i < num_times/5; i++) {224 if ( i % 1000 == 0 ) sout | "Iteration:" | i;225 wait( c_s, 1`ns);226 } // for223 for (unsigned int i = 0; i < num_times/5; i++) { 224 if (i % 1000 == 0) printf("Iteration: %d\n", i); 225 wait(c_s, 1`ns); 226 } 227 227 done = true; 228 } // main228 } 229 229 230 230 thread T_C_WDS {}; 231 231 232 232 void main( T_C_WDS & ) { 233 for ( unsigned int i = 0; i < num_times; i++) {234 while ( empty( c_s ) && !done) { }235 notify_one( c_s);236 sleep( 1`ns);237 if ( done) break;238 } // for239 } // main233 for (unsigned int i = 0; i < num_times; i++) { 234 while (empty(c_s) && !done) { } 235 notify_one(c_s); 236 sleep(1`ns); 237 if(done) break; 238 } 239 } 240 240 241 241 thread T_C_LWD {}; … … 243 243 void main( T_C_LWD & ) { 244 244 done = false; 245 for ( unsigned int i = 0; i < num_times/5; i++) {246 if ( i % 1000 == 0 ) sout | "Iteration:" | i;247 lock( s);248 wait( c_s, s, 1`ns);249 unlock( s);250 } // for245 for (unsigned int i = 0; i < num_times/5; i++) { 246 if (i % 1000 == 0) printf("Iteration: %d\n", i); 247 lock(s); 248 wait(c_s, s, 1`ns); 249 unlock(s); 250 } 251 251 done = true; 252 } // main252 } 253 253 254 254 thread T_C_LWDS {}; 255 255 256 256 void main( T_C_LWDS & ) { 257 for ( unsigned int i = 0; i < num_times; i++) {258 while ( empty( c_s ) && !done) { }259 lock( s);260 notify_one( c_s);261 unlock( s);262 sleep( 1`ns);263 if ( done) break;264 } // for265 } // main257 for (unsigned int i = 0; i < num_times; i++) { 258 while (empty(c_s) && !done) { } 259 lock(s); 260 notify_one(c_s); 261 unlock(s); 262 sleep(1`ns); 263 if(done) break; 264 } 265 } 266 266 267 267 int main() { 268 268 processor p[2]; 269 sout | "Start Test 1: multi acquisition lock and condition variable single wait/notify";269 printf("Start Test 1: multi acquisition lock and condition variable single wait/notify\n"); 270 270 { 271 271 T_C_M_WS1 t1[2]; 272 272 } 273 sout | "Done Test 1";274 275 sout | "Start Test 2: multi acquisition lock and condition variable 3 wait/notify all";273 printf("Done Test 1\n"); 274 275 printf("Start Test 2: multi acquisition lock and condition variable 3 wait/notify all\n"); 276 276 { 277 277 T_C_M_WB1 t1[4]; 278 278 } 279 sout | "Done Test 2";280 281 sout | "Start Test 3: single acquisition lock and condition variable single wait/notify";279 printf("Done Test 2\n"); 280 281 printf("Start Test 3: single acquisition lock and condition variable single wait/notify\n"); 282 282 { 283 283 T_C_S_WS1 t1[2]; 284 284 } 285 sout | "Done Test 3";286 287 sout | "Start Test 4: single acquisition lock and condition variable 3 wait/notify all";285 printf("Done Test 3\n"); 286 287 printf("Start Test 4: single acquisition lock and condition variable 3 wait/notify all\n"); 288 288 { 289 289 T_C_S_WB1 t1[4]; 290 290 } 291 sout | "Done Test 4";292 293 sout | "Start Test 5: owner lock and condition variable single wait/notify";291 printf("Done Test 4\n"); 292 293 printf("Start Test 5: owner lock and condition variable single wait/notify\n"); 294 294 { 295 295 T_C_O_WS1 t1[2]; 296 296 } 297 sout | "Done Test 5";298 299 sout | "Start Test 6: owner lock and condition variable 3 wait/notify all";297 printf("Done Test 5\n"); 298 299 printf("Start Test 6: owner lock and condition variable 3 wait/notify all\n"); 300 300 { 301 301 T_C_O_WB1 t1[4]; 302 302 } 303 sout | "Done Test 6";304 305 sout | "Start Test 7: linear backoff lock and condition variable single wait/notify";303 printf("Done Test 6\n"); 304 305 printf("Start Test 7: linear backoff lock and condition variable single wait/notify\n"); 306 306 { 307 307 T_C_L_WS1 t1[2]; 308 308 } 309 sout | "Done Test 7";310 311 sout | "Start Test 8: linear backoff lock and condition variable 3 wait/notify all";309 printf("Done Test 7\n"); 310 311 printf("Start Test 8: linear backoff lock and condition variable 3 wait/notify all\n"); 312 312 { 313 313 T_C_L_WB1 t1[4]; 314 314 } 315 sout | "Done Test 8";316 317 sout | "Start Test 9: multi acquisiton lock and condition variable multiple acquire and wait/notify";315 printf("Done Test 8\n"); 316 317 printf("Start Test 9: multi acquisiton lock and condition variable multiple acquire and wait/notify\n"); 318 318 { 319 319 T_C_M_WS2 t1[2]; 320 320 } 321 sout | "Done Test 9";322 323 sout | "Start Test 10: owner lock and condition variable multiple acquire and wait/notify";321 printf("Done Test 9\n"); 322 323 printf("Start Test 10: owner lock and condition variable multiple acquire and wait/notify\n"); 324 324 { 325 325 T_C_O_WS2 t1[2]; 326 326 } 327 sout | "Done Test 10";328 329 sout | "Start Test 11: no lock condition variable wait/notify";327 printf("Done Test 10\n"); 328 329 printf("Start Test 11: no lock condition variable wait/notify\n"); 330 330 { 331 331 T_C_NLW t1; 332 332 T_C_NLS t2; 333 333 } 334 sout | "Done Test 11";335 336 sout | "Start Test 12: locked condition variable wait/notify with front()";334 printf("Done Test 11\n"); 335 336 printf("Start Test 12: locked condition variable wait/notify with front()\n"); 337 337 { 338 338 T_C_S_WNF t1[2]; 339 339 } 340 sout | "Done Test 12";341 342 sout | "Start Test 13: fast block lock and fast cond var single wait/notify";340 printf("Done Test 12\n"); 341 342 printf("Start Test 13: fast block lock and fast cond var single wait/notify\n"); 343 343 { 344 344 T_F_C_F_WS1 t1[2]; 345 345 } 346 sout | "Done Test 13"; 347 } // main 346 printf("Done Test 13\n"); 347 348 }
Note:
See TracChangeset
for help on using the changeset viewer.