+#include "common.h"
#include <atomic>
#include <cds/gc/dhp.h>
#include <cds/gc/hp.h>
typedef cds_others::SpinBarrier Barrier;
+static size_t s_nBarrierThreadCount = 6;
+static size_t s_nBarrierPassCount = 100000000;
+
class BarrierTest : public cds_test::stress_fixture {
protected:
static Barrier *barrier;
static int count;
- static const int kThreads = 6;
- static const int kPassCount = 10000;
- static void SetUpTestCase() {}
+ static void SetUpTestCase() {
+ cds_test::config const &cfg = get_config("Misc");
+ GetConfig(BarrierPassCount);
+ GetConfig(BarrierThreadCount);
+ }
static void TearDownTestCase() {
- assert (count == kPassCount*kPassCount);
+ if (count != s_nBarrierPassCount) {
+ cout << "Incorrect" << endl;
+ }
}
static void Thread() {
- for (int i = 0; i < kPassCount; i++) {
- for (int j = 0; j < kPassCount; j++) {
- if (barrier->wait()) {
- count++;
- }
+ for (ullong i = 0; i < s_nBarrierPassCount; i++) {
+ if (barrier->wait()) {
+ count++;
}
}
}
Barrier *BarrierTest::barrier;
int BarrierTest::count;
-const int BarrierTest::kThreads;
TEST_F(BarrierTest, Wait) {
- barrier = new Barrier(kThreads);
- int num_threads = kThreads;
- std::thread *threads = new std::thread[num_threads];
- for (int i = 0; i < num_threads; i++) {
+ barrier = new Barrier(s_nBarrierThreadCount);
+ std::thread *threads = new std::thread[s_nBarrierThreadCount];
+ for (int i = 0; i < s_nBarrierThreadCount; i++) {
threads[i] = std::thread(Thread);
}
- for (int i = 0; i < num_threads; i++) {
+ for (int i = 0; i < s_nBarrierThreadCount; i++) {
threads[i].join();
}
}