Putting the actual OpenBTS P2.8 source code into the public SVN branch.


git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2242 19bc5d8c-e614-43d4-8b26-e1612bc8e597
diff --git a/CommonLibs/InterthreadTest.cpp b/CommonLibs/InterthreadTest.cpp
new file mode 100644
index 0000000..1712689
--- /dev/null
+++ b/CommonLibs/InterthreadTest.cpp
@@ -0,0 +1,114 @@
+/*
+* Copyright 2008 Free Software Foundation, Inc.
+*
+*
+* This software is distributed under the terms of the GNU Affero Public License.
+* See the COPYING file in the main directory for details.
+*
+* This use of this software may be subject to additional restrictions.
+* See the LEGAL file in the main directory for details.
+
+	This program is free software: you can redistribute it and/or modify
+	it under the terms of the GNU Affero General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	This program is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU Affero General Public License for more details.
+
+	You should have received a copy of the GNU Affero General Public License
+	along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+
+#include "Threads.h"
+#include "Interthread.h"
+#include <iostream>
+
+using namespace std;
+
+
+InterthreadQueue<int> gQ;
+InterthreadMap<int,int> gMap;
+
+void* qWriter(void*)
+{
+	int *p;
+	for (int i=0; i<20; i++) {
+		p = new int;
+		*p = i;
+		COUT("queue write " << *p);
+		gQ.write(p);
+		if (random()%2) sleep(1);
+	}
+	p = new int;
+	*p = -1;
+	gQ.write(p);
+	return NULL;
+}
+
+void* qReader(void*)
+{
+	bool done = false;
+	while (!done) {
+		int *p = gQ.read();
+		COUT("queue read " << *p);
+		if (*p<0) done=true;
+		delete p;
+	}
+	return NULL;
+}
+
+
+void* mapWriter(void*)
+{
+	int *p;
+	for (int i=0; i<20; i++) {
+		p = new int;
+		*p = i;
+		COUT("map write " << *p);
+		gMap.write(i,p);
+		if (random()%2) sleep(1);
+	}
+	return NULL;
+}
+
+void* mapReader(void*)
+{
+	for (int i=0; i<20; i++) {
+		int *p = gMap.read(i);
+		COUT("map read " << *p);
+		delete p;
+	}
+	return NULL;
+}
+
+
+
+
+
+
+int main(int argc, char *argv[])
+{
+	Thread qReaderThread;
+	qReaderThread.start(qReader,NULL);
+	Thread mapReaderThread;
+	mapReaderThread.start(mapReader,NULL);
+
+	Thread qWriterThread;
+	qWriterThread.start(qWriter,NULL);
+	Thread mapWriterThread;
+	mapWriterThread.start(mapWriter,NULL);
+
+	qReaderThread.join();
+	qWriterThread.join();
+	mapReaderThread.join();
+	mapWriterThread.join();
+}
+
+
+// vim: ts=4 sw=4