source: tests/concurrent/semaphore.cfa@ 733fd3d

ADT ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since 733fd3d was 976bc68, checked in by Thierry Delisle <tdelisle@…>, 4 years ago

Added two more tests for locks

  • Property mode set to 100644
File size: 1.2 KB
Line 
1#include <fstream.hfa>
2#include <locks.hfa>
3#include <thread.hfa>
4
5enum { num_blockers = 17, num_unblockers = 13 };
6
7void thrash() {
8 unsigned t[100];
9 for(i; 100) {
10 t[i] = 0xDEADBEEF;
11 }
12}
13
14ThreadBenaphore ben;
15
16// const unsigned int num_blocks = 25000;
17const unsigned int num_blocks = 5;
18
19thread Blocker {
20 size_t sum;
21};
22
23void main(Blocker & this) {
24 $thread * me = active_thread();
25 this.sum = 0;
26 for(num_blocks) {
27 this.sum += (unsigned)me;
28 thrash();
29 P(ben);
30 if(((thread&)this).seqable.next != 0p) sout | acquire |"Link not invalidated";
31 thrash();
32 }
33}
34
35thread Unblocker {
36 size_t sum;
37};
38
39void main(Unblocker & this) {
40 this.sum = 0;
41 LOOP: for() {
42 waitfor( ^?{} : this) {
43 break LOOP;
44 }
45 or else {}
46
47 $thread * t = V(ben, false);
48 if(t) {
49 this.sum += (unsigned)t;
50 unpark(t);
51 }
52 yield(random(10));
53 }
54}
55
56int main() {
57 size_t usum = 0;
58 size_t bsum = 0;
59
60 sout | "Starting";
61 {
62 Blocker blockers [num_blockers ];
63 Unblocker unblockers[num_unblockers];
64
65 for(i;num_blockers) {
66 bsum += join(blockers[i]).sum;
67 }
68
69 sout | "Done!";
70
71 for(i;num_unblockers) {
72 usum += join(unblockers[i]).sum;
73 }
74 }
75 if(bsum == usum) sout | "Match!";
76 else sout | "No Match!" | usum | "!=" | bsum;
77}
Note: See TracBrowser for help on using the repository browser.