source: src/tests/concurrent/preempt.c@ 4d7fb9e

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum with_gc
Last change on this file since 4d7fb9e was b68fc85, checked in by Thierry Delisle <tdelisle@…>, 7 years ago

Added more checks to preempt test to make sure preemption stays enabled

  • Property mode set to 100644
File size: 1.0 KB
Line 
1#include <kernel>
2#include <thread>
3#include <time>
4
5#ifndef PREEMPTION_RATE
6#define PREEMPTION_RATE 10`ms
7#endif
8
9Duration default_preemption() {
10 return PREEMPTION_RATE;
11}
12
13#ifdef LONG_TEST
14static const unsigned long N = 30_000ul;
15#else
16static const unsigned long N = 500ul;
17#endif
18
19extern void __cfaabi_check_preemption();
20
21static volatile int counter = 0;
22
23thread worker_t {
24 int value;
25};
26
27void ?{}( worker_t & this, int value ) {
28 this.value = value;
29}
30
31void main(worker_t & this) {
32 while(counter < N) {
33 __cfaabi_check_preemption();
34 if( (counter % 7) == this.value ) {
35 __cfaabi_check_preemption();
36 int next = __atomic_add_fetch_4(&counter, 1, __ATOMIC_SEQ_CST);
37 __cfaabi_check_preemption();
38 if( (next % 100) == 0 ) printf("%d\n", (int)next);
39 __cfaabi_check_preemption();
40 }
41 __cfaabi_check_preemption();
42 }
43}
44
45int main(int argc, char* argv[]) {
46 processor p;
47 {
48 worker_t w0 = 0;
49 worker_t w1 = 1;
50 worker_t w2 = 2;
51 worker_t w3 = 3;
52 worker_t w4 = 4;
53 worker_t w5 = 5;
54 worker_t w6 = 6;
55 }
56}
Note: See TracBrowser for help on using the repository browser.