Skip to content

Commit 1ff1534

Browse files
committed
ci
1 parent acfb349 commit 1ff1534

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.wait/lost_wakeup.pass.cpp

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,34 +23,35 @@
2323
constexpr int num_waiters = 8;
2424
constexpr int num_iterations = 10'000;
2525

26-
void wait(std::atomic<int>& waiter_ready, const std::atomic<int>& state) {
27-
for (int i = 0; i < num_iterations; ++i) {
28-
auto old_state = state.load(std::memory_order_acquire);
29-
waiter_ready.fetch_add(1, std::memory_order_acq_rel);
30-
state.wait(old_state, std::memory_order_acquire);
31-
}
32-
}
33-
34-
void notify(std::atomic<int>& waiter_ready, std::atomic<int>& state) {
35-
for (int i = 0; i < num_iterations; ++i) {
36-
while (waiter_ready.load(std::memory_order_acquire) < num_waiters) {
37-
std::this_thread::yield();
38-
}
39-
waiter_ready.store(0, std::memory_order_release);
40-
state.fetch_add(1, std::memory_order_acq_rel);
41-
state.notify_all();
42-
}
43-
}
44-
4526
int main(int, char**) {
4627
for (int run = 0; run < 20; ++run) {
4728
std::atomic<int> waiter_ready(0);
4829
std::atomic<int> state(0);
30+
31+
auto wait = [&]() {
32+
for (int i = 0; i < num_iterations; ++i) {
33+
auto old_state = state.load(std::memory_order_acquire);
34+
waiter_ready.fetch_add(1, std::memory_order_acq_rel);
35+
state.wait(old_state, std::memory_order_acquire);
36+
}
37+
};
38+
39+
auto notify = [&] {
40+
for (int i = 0; i < num_iterations; ++i) {
41+
while (waiter_ready.load(std::memory_order_acquire) < num_waiters) {
42+
std::this_thread::yield();
43+
}
44+
waiter_ready.store(0, std::memory_order_release);
45+
state.fetch_add(1, std::memory_order_acq_rel);
46+
state.notify_all();
47+
}
48+
};
49+
4950
std::vector<std::jthread> threads;
50-
for (int i = 0; i < 8; ++i)
51-
threads.push_back(support::make_test_jthread(wait, std::ref(waiter_ready), std::cref(state)));
51+
for (int i = 0; i < num_waiters; ++i)
52+
threads.push_back(support::make_test_jthread(wait));
5253

53-
threads.push_back(support::make_test_jthread(notify, std::ref(waiter_ready), std::ref(state)));
54+
threads.push_back(support::make_test_jthread(notify));
5455
}
5556

5657
return 0;

0 commit comments

Comments
 (0)