2 Copyright (C) 2004-2006 Grame
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #include "JackMachSemaphore.h"
26 #include "JackMachThread.h"
29 #include "JackPosixThread.h"
30 #include "JackPosixSemaphore.h"
37 struct ServerThread
: public JackRunnableInterface
{
40 JackSynchro
* fServerSem
;
41 JackSynchro
* fClientSem
;
45 fServerSem
->Allocate("JackSemServer", 0);
46 fClientSem
->Allocate("JackSemClient", 0);
47 //fThread = new JackMachThread(this);
48 fThread
->SetParams(0, 500*1000, 500*1000);
50 //fThread->AcquireRealTime();
53 virtual ~ServerThread()
61 printf("Execute Server\n");
62 for (int i
= 0; i
< ITER
; i
++) {
71 struct ClientThread
: public JackRunnableInterface
{
74 JackSynchro
* fServerSem
;
75 JackSynchro
* fClientSem
;
79 fServerSem
->Connect("JackSemServer");
80 fClientSem
->Connect("JackSemClient");
81 //fThread = new JackMachThread(this);
82 fThread
->SetParams(0, 500*1000, 500*1000);
84 //fThread->AcquireRealTime();
87 virtual ~ClientThread()
95 struct timeval T0
, T1
;
96 printf("Execute Client\n");
100 for (int i
= 0; i
< ITER
; i
++) {
101 fServerSem
->Signal();
105 gettimeofday(&T1
, 0);
106 printf("%5.1lf usec\n", (1e6
* T1
.tv_sec
- 1e6
* T0
.tv_sec
+ T1
.tv_usec
- T0
.tv_usec
) / (2.0 * ITER
));
112 void server(JackSynchro
* sem
)
117 sem
->Allocate("JackSem", 0);
119 while (((c
= getchar()) != 'q')) {
124 printf("SynchroSignal....\n");
127 printf("SynchroSignal OK\n");
131 printf("SemaphoreWait....\n");
133 printf("SemaphoreWait OK\n");
139 void client(JackSynchro
* sem
)
144 sem
->Connect("JackSem");
146 while (((c
= getchar()) != 'q')) {
151 printf("SemaphoreSignal....\n");
153 printf("SemaphoreSignal OK\n");
157 printf("SemaphoreWait....\n");
159 printf("SemaphoreWait OK\n");
165 int main (int argc
, char * const argv
[])
168 ServerThread
* serverthread
= NULL
;
169 ClientThread
* clientthread
= NULL
;
170 JackSynchro
* sem1
= NULL
;
172 if (strcmp(argv
[1],"-s") == 0) {
173 printf("Posix semaphore\n");
174 sem1
= new JackPosixSemaphore();
177 if (strcmp(argv
[1],"-f") == 0) {
179 sem1
= new JackFifo();
183 if (strcmp(argv
[1],"-m") == 0) {
184 printf("Mach semaphore\n");
185 sem1
= new JackMachSemaphore();
190 if (strcmp(argv[2], "server") == 0) {
191 serverthread = new ServerThread();
193 clientthread = new ClientThread();
197 if (strcmp(argv
[2], "server") == 0) {
203 while (((c
= getchar()) != 'q')) {}