File: A.java

package info (click to toggle)
cbmc 5.12-5
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 92,512 kB
  • sloc: cpp: 301,761; ansic: 51,699; java: 27,534; python: 5,113; yacc: 4,756; makefile: 3,184; lex: 2,749; sh: 1,347; perl: 555; xml: 404; pascal: 203; ada: 36
file content (80 lines) | stat: -rw-r--r-- 1,139 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
public class A
{
  static int g;

  public synchronized void me1()
  {
    g = 0;
  }

  // expected verification success
  // --
  // base-case, no synchronization
  public void me2()
  {
    B t = new B();
    t.shared = 5;
    t.start();
    assert(t.shared == 5 || t.shared == 6);
  }

  // expected verification success
  // --
  // locking mechanism
  public void me3()
  {
    B t = new B();
    synchronized(t)
    {
      t.shared = 5;
      t.start();
      assert(t.shared == 5);
    }
  }

  // expected verification success
  // --
  // KNOWNBUG: synchronization of static synchronized
  // methods is not yet supported
  public void me4()
  {
    C t = new C();
    synchronized(C.class)
    {
      C.shared = 5;
      t.start();
      assert(C.shared == 5);
    }
  }
}

class B extends Thread
{
  public int shared = 0;

  @Override
  public void run()
  {
    set();
  }
  public synchronized void set()
  {
    shared++;
  }
}

class C extends Thread
{
  public static int shared = 0;

  @Override
  public void run()
  {
    C.static_set();
  }

  public static synchronized void static_set()
  {
    C.shared++;
  }
}