mutex_test.cpp
1 #define msecsleep(x) (x)
2 
3 //#include "xtime.h"
4 
5 #include <support.h>
6 
7 #include <stdint.h>
8 #include <thread>
9 
10 #include "xthread.h"
11 #include "xthread.cpp"
12 
13 atomic<int> objcnt = 0;
14 atomic<int> total = 0;
15 
16 XMutex g_mutex;
17 XRecursiveMutex g_rec_mutex;
18 int g_cnt1 = 0;
19 int g_cnt2 = 0;
20 
21 void
22 start_routine(void) {
23  printf("start\n");
24  for(int i = 0; i < 100000; i++) {
25  XScopedLock<XMutex> lock(g_mutex);
26  {
27 /* XScopedLock<XRecursiveMutex> lock(g_rec_mutex);
28  {
29  XScopedLock<XRecursiveMutex> lock(g_rec_mutex);
30  {
31  XScopedLock<XRecursiveMutex> lock(g_rec_mutex);
32  g_cnt2++;
33  }
34  }
35  g_cnt2--;
36 */ }
37  g_cnt1++;
38  writeBarrier();
39  g_cnt1--;
40  }
41  printf("finish\n");
42  return;
43 }
44 
45 #define NUM_THREADS 8
46 
47 int
48 main(int argc, char **argv)
49 {
50  std::thread threads[NUM_THREADS];
51 
52  for(int i = 0; i < NUM_THREADS; i++) {
53  std::thread th( &start_routine);
54  threads[i].swap(th);
55  }
56  for(int i = 0; i < NUM_THREADS; i++) {
57  threads[i].join();
58  }
59  printf("join\n");
60  if(g_cnt1 != 0) {
61  printf("failed\n");
62  return -1;
63  }
64  if(total != 0) {
65  printf("failed\n");
66  return -1;
67  }
68  printf("succeeded\n");
69  return 0;
70 }

Generated for KAME4 by  doxygen 1.8.3