big svn cleanup
[anytun.git] / src / Sockets / tests / semtest.cpp
blob442d5d663dd51e446c1f4ec86d0528cc940166f2
1 #include <stdio.h>
2 #include <stdlib.h>
3 #ifndef _WIN32
4 #include <unistd.h>
5 #include <Semaphore.h>
6 #include <Mutex.h>
7 #include <Thread.h>
8 #include <Utility.h>
9 #include <Lock.h>
12 class MyThread : public Thread
14 public:
15 void Run() {
16 printf("Thread\n");
21 class SemLock
23 public:
24 SemLock(Semaphore& sem) : m_sem(sem) {
25 m_sem.Wait();
27 ~SemLock() {
28 m_sem.Post();
31 private:
32 Semaphore& m_sem;
36 /**
37 * Return time difference between two struct timeval's, in seconds
38 * \param t0 start time
39 * \param t end time
41 double Diff(struct timeval t0,struct timeval t)
43 t.tv_sec -= t0.tv_sec;
44 t.tv_usec -= t0.tv_usec;
45 if (t.tv_usec < 0)
47 t.tv_usec += 1000000;
48 t.tv_sec -= 1;
50 return t.tv_sec + (double)t.tv_usec / 1000000;
54 static int val = 0;
56 void lock(Mutex& m, int i)
58 Lock l(m);
59 val += i;
63 void lock(Semaphore& s, int i)
65 SemLock l(s);
66 val += i;
68 #endif // WIN32
71 int main()
73 #ifndef _WIN32
74 Mutex mutex;
75 Semaphore sema(1);
76 struct timeval start;
77 struct timeval tt;
78 double d;
80 Utility::GetTime(&start);
81 for (int i = 0; i < 100000; i++)
82 lock(mutex, i);
83 Utility::GetTime(&tt);
84 d = Diff(start, tt);
85 printf("%.4f sec\n", d);
87 Utility::GetTime(&start);
88 for (int i = 0; i < 100000; i++)
89 lock(sema, i);
90 Utility::GetTime(&tt);
91 d = Diff(start, tt);
92 printf("%.4f sec\n", d);
93 #endif