63 explicit TestSpinLock1(SpinLock::eMode mode)
70 Real v1 = Platform::getRealTime();
71 const Int32 nb_iter = 70;
72 const Int32 nb_thread = 10;
73 for (
Integer i = 0; i < nb_iter; ++i) {
75 std::vector<MyThread> threads(nb_thread);
76 for (
Integer j = 0; j < nb_thread; ++j)
77 threads[j].create(&f1);
78 for (
Integer j = 0; j < nb_thread; ++j)
81 Real v2 = Platform::getRealTime();
82 std::cout <<
"Test1 spin_time=" << (v2 - v1) <<
" count2=" << m_count2 <<
" count3=" << m_count3 <<
"\n";
83 Int64 expected_count3 = nb_iter * m_nb_sub_iter * nb_thread;
84 Int64 expected_count2 = 10 * expected_count3 + (expected_count3 * (expected_count3 + 1)) / 2;
85 std::cout <<
" expected_count2=" << expected_count2 <<
" expected_count3=" << expected_count3 <<
"\n";
86 ASSERT_EQ(m_count2, expected_count2);
87 ASSERT_EQ(m_count3, expected_count3);
91 for (Int32 i = 0; i < m_nb_sub_iter; ++i) {
94 SpinLock::ScopedLock sl(m_lock);
102 std::atomic<Int64> m_count = 0;
105 Int32 m_nb_sub_iter = 1000;
116 : m_thread_implementation(Concurrency::getThreadImplementation())
122 Real v1 = Platform::getRealTime();
123 const Int32 nb_iter = 70;
124 const Int32 nb_thread = 10;
125 m_thread_barrier = m_thread_implementation->createBarrier();
126 m_thread_barrier->init(nb_thread);
127 for (
Integer i = 0; i < nb_iter; ++i) {
129 std::vector<MyThread> threads(nb_thread);
130 for (
Integer j = 0; j < nb_thread; ++j)
131 threads[j].create(&f1);
132 for (
Integer j = 0; j < nb_thread; ++j)
134 m_do_print_id =
false;
136 Real v2 = Platform::getRealTime();
137 Int64 nb_sub_iter = m_nb_sub_iter;
138 std::cout <<
"Test1 spin_time=" << (v2 - v1) <<
" count2=" << m_count2 <<
" count3=" << m_count3 <<
"\n";
139 Int64 i64_nb_thread = nb_thread;
140 Int64 expected_count3 = nb_iter * nb_sub_iter * i64_nb_thread;
141 Int64 expected_count2 = 10 * expected_count3 + (expected_count3 * (expected_count3 + 1)) / 2;
142 std::cout <<
" expected_count2=" << expected_count2 <<
" expected_count3=" << expected_count3 <<
"\n";
143 ASSERT_EQ(m_count2, expected_count2);
144 ASSERT_EQ(m_count3, expected_count3);
145 m_thread_barrier->destroy();
149 for (Int32 i = 0; i < m_nb_sub_iter; ++i) {
152 Mutex::ScopedLock sl(m_mutex);
155 m_count2 += m_count3;
158 m_thread_barrier->wait();
160 std::ostringstream ostr;
161 ostr <<
"THREAD_ID=" << m_thread_implementation->currentThread() <<
"\n";
162 std::cout << ostr.str();
165 IThreadImplementation* m_thread_implementation =
nullptr;
167 IThreadBarrier* m_thread_barrier =
nullptr;
168 std::atomic<Int64> m_count = 0;
171 Int32 m_nb_sub_iter = 1000;
172 bool m_do_print_id =
true;