summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/queue_test.cpp45
-rw-r--r--test/sem_test.cpp37
-rw-r--r--test/thread_test.cpp44
3 files changed, 52 insertions, 74 deletions
diff --git a/test/queue_test.cpp b/test/queue_test.cpp
index b13c13f..15e5975 100644
--- a/test/queue_test.cpp
+++ b/test/queue_test.cpp
@@ -22,11 +22,11 @@
#include <atomic>
#include <iostream>
#include <string>
+#include <thread>
#include <vector>
#include "raul/SRMWQueue.hpp"
#include "raul/SRSWQueue.hpp"
-#include "raul/Thread.hpp"
#include "raul/fmt.hpp"
using namespace std;
@@ -61,26 +61,22 @@ struct WriteAction {
// The victim
SRMWQueue<WriteAction> queue(QUEUE_SIZE);
-class WriteThread : public Thread {
-public:
- WriteThread() {}
-
-protected:
- void _run() {
- while (!_exit_flag) {
- for (unsigned j=0; j < PUSHES_PER_ITERATION; ++j) {
- unsigned i = rand() % NUM_DATA;
- if (queue.push(WriteAction(i))) {
- ++(data[i].write_count);
- //cout << "WRITE " << i << "\r\n";
- } else {
- //cerr << "FAILED WRITE\r\n";
- }
+static void
+test_write(bool* exit_flag)
+{
+ while (!*exit_flag) {
+ for (unsigned j=0; j < PUSHES_PER_ITERATION; ++j) {
+ unsigned i = rand() % NUM_DATA;
+ if (queue.push(WriteAction(i))) {
+ ++(data[i].write_count);
+ //cout << "WRITE " << i << "\r\n";
+ } else {
+ //cerr << "FAILED WRITE\r\n";
}
}
-
- cout << "Writer exiting." << endl;
}
+
+ cout << "Writer exiting." << endl;
};
// Returns 0 if all read count/write count pairs are equal,
@@ -129,11 +125,12 @@ main()
}
cout << "Testing concurrent reading/writing" << endl;
- vector<WriteThread*> writers(NUM_WRITERS, NULL);
+ bool exit_flags[NUM_WRITERS];
+ vector<std::thread*> writers(NUM_WRITERS, NULL);
- for (unsigned i=0; i < NUM_WRITERS; ++i) {
- writers[i] = new WriteThread();
- writers[i]->start();
+ for (unsigned i = 0; i < NUM_WRITERS; ++i) {
+ exit_flags[i] = false;
+ writers[i] = new std::thread(test_write, &exit_flags[i]);
}
// Read
@@ -158,8 +155,10 @@ main()
cout << "Processed " << total_processed << " requests" << endl;
// Stop the writers
- for (unsigned i=0; i < NUM_WRITERS; ++i)
+ for (unsigned i = 0; i < NUM_WRITERS; ++i) {
+ exit_flags[i] = true;
writers[i]->join();
+ }
//cout << "\n\n****************** DONE *********************\n\n";
diff --git a/test/sem_test.cpp b/test/sem_test.cpp
index 1836317..4211ce3 100644
--- a/test/sem_test.cpp
+++ b/test/sem_test.cpp
@@ -14,36 +14,30 @@
along with Raul. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <iostream>
#include <limits.h>
#include <unistd.h>
-#include "raul/Thread.hpp"
+#include <iostream>
+#include <thread>
+
#include "raul/Semaphore.hpp"
using namespace std;
using namespace Raul;
-class Waiter : public Raul::Thread {
-public:
- Waiter(Semaphore& sem) : Raul::Thread(), _sem(sem)
- {}
-
-private:
- void _run() {
- while (true) {
- if (_sem.timed_wait(250)) {
- cout << "[Waiter] Received signal" << endl;
- break;
- } else {
- cout << "[Waiter] Timed out" << endl;
- }
+static void
+wait(Semaphore* sem)
+{
+ while (true) {
+ if (sem->timed_wait(250)) {
+ cout << "[Waiter] Received signal" << endl;
+ break;
+ } else {
+ cout << "[Waiter] Timed out" << endl;
}
- cout << "[Waiter] Exiting" << endl;
}
-
- Semaphore& _sem;
-};
+ cout << "[Waiter] Exiting" << endl;
+}
int
main()
@@ -60,8 +54,7 @@ main()
return 1;
}
- Waiter waiter(sem);
- waiter.start();
+ std::thread waiter(wait, &sem);
sleep(1);
diff --git a/test/thread_test.cpp b/test/thread_test.cpp
index 785e596..7fcaf9f 100644
--- a/test/thread_test.cpp
+++ b/test/thread_test.cpp
@@ -16,9 +16,9 @@
#include <atomic>
#include <iostream>
+#include <thread>
#include "raul/Semaphore.hpp"
-#include "raul/Thread.hpp"
#include "raul/ThreadVar.hpp"
using namespace std;
@@ -27,39 +27,25 @@ using namespace Raul;
Raul::ThreadVar<int> var(0);
std::atomic<int> n_errors(0);
-class Waiter : public Raul::Thread {
-public:
- Waiter(Semaphore& sem) : Raul::Thread(), _sem(sem) {
- if (set_scheduling(true, 10)) {
- cerr << "Set priority on non-existent thread" << endl;
- }
- }
-
-private:
- void _run() {
- if (!set_scheduling(true, 10)) {
- cerr << "Failed to set priority" << endl;
- }
- var = 41;
- cout << "[Waiter] Waiting for signal..." << endl;
- _sem.wait();
- cout << "[Waiter] Received signal, exiting" << endl;
- var = 42;
- if (var != 42) {
- cerr << "[Waiter] var != 42" << endl;
- ++n_errors;
- }
+static void
+wait(Semaphore* sem)
+{
+ var = 41;
+ cout << "[Waiter] Waiting for signal..." << endl;
+ sem->wait();
+ cout << "[Waiter] Received signal, exiting" << endl;
+ var = 42;
+ if (var != 42) {
+ cerr << "[Waiter] var != 42" << endl;
+ ++n_errors;
}
-
- Semaphore& _sem;
-};
+}
int
main()
{
- Semaphore sem(0);
- Waiter waiter(sem);
- waiter.start();
+ Semaphore sem(0);
+ std::thread waiter(wait, &sem);
var = 24;