55bea22071fcc1880bc93d49b8d0eda10f0da0b2
[c11tester.git] / pthread_test / pthread_mutex_test.cc
1 #include <stdio.h>
2 #include <pthread.h>
3 #define NTHREADS 2
4 void *thread_function(void *);
5 //pthread_mutex_t mutex1; 
6
7 int counter=0;
8
9 class Box {
10 public:
11 //      int counter;
12
13         static Box& getInstance() {
14                 static Box instance;
15                 return instance;
16         }
17
18         void addone() {
19                 pthread_mutex_lock(&pool_mutex);
20                 counter++;
21                 pthread_mutex_unlock(&pool_mutex);
22         }
23
24 private:
25         Box() { 
26                 pthread_mutex_init(&pool_mutex, NULL); 
27                 counter = 0;
28         }
29         pthread_mutex_t pool_mutex;
30 };
31
32 int user_main(int argv, char **argc)
33 {
34 //   void *dummy = NULL;
35 //   pthread_mutex_init(&mutex1, NULL); /* PTHREAD_MUTEX_INITIALIZER;*/
36
37 //   pthread_t thread_id[NTHREADS];
38 //   int i, j;
39
40    Box::getInstance().addone();
41
42 /*   for(i=0; i < NTHREADS; i++)
43    {
44       pthread_create( &thread_id[i], NULL, &thread_function, NULL );
45    }
46
47    for(j=0; j < NTHREADS; j++)
48    {
49       pthread_join( thread_id[j], NULL); 
50    }
51 */
52  
53    printf("Final counter value: %d\n", counter);
54    /*
55    for (i=0;i<NTHREADS; i++) {
56       printf("id %ld\n", thread_id[i]);
57    }*/
58    return 0;
59 }
60
61 void *thread_function(void *dummyPtr)
62 {
63 //   printf("Thread number %ld\n", pthread_self());
64    Box::getInstance().addone();
65 //   pthread_mutex_lock( &mutex1 );
66 //   Box::getInstance().counter++;
67 //   pthread_mutex_unlock( &mutex1 );
68    return NULL;
69 }