source: CIVL/examples/translation/pthread/cprover/01_inc_true.c@ 63d4ef2

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since 63d4ef2 was 2c4cc44, checked in by John Edenhofner <johneden@…>, 12 years ago

Added new folders for examples and created test for error in casting (VoidCastTest)

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@1277 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 793 bytes
Line 
1//http://www.ibm.com/developerworks/java/library/j-jtp04186/index.html
2//A counter using locks
3
4#include <pthread.h>
5
6#define assume(e) __VERIFIER_assume(e)
7#define assert(e) { if(!(e)) { ERROR: goto ERROR; (void)0; } }
8
9volatile unsigned value, m = 0;
10
11void __VERIFIER_assume(int expression) { if (!expression) { LOOP: goto LOOP; }; return; }
12
13void __VERIFIER_atomic_acquire()
14{
15 assume(m==0);
16 m = 1;
17}
18
19void __VERIFIER_atomic_release()
20{
21 assume(m==1);
22 m = 0;
23}
24
25void * thr1(void* arg) {
26 unsigned v = 0;
27
28 __VERIFIER_atomic_acquire();
29 if(value == 0u-1) {
30 __VERIFIER_atomic_release();
31
32 return 0;
33 }else{
34
35 v = value;
36 value = v + 1;
37 __VERIFIER_atomic_release();
38
39 assert(value > v);
40
41 return 0;
42 }
43}
44
45int main(){
46 pthread_t t;
47
48 while(1) { pthread_create(&t, 0, thr1, 0); }
49}
50
Note: See TracBrowser for help on using the repository browser.