|
|
@ -9,10 +9,11 @@
|
|
|
|
#include <memory>
|
|
|
|
#include <memory>
|
|
|
|
#include <mutex>
|
|
|
|
#include <mutex>
|
|
|
|
#include <new>
|
|
|
|
#include <new>
|
|
|
|
#include <stop_token>
|
|
|
|
|
|
|
|
#include <type_traits>
|
|
|
|
#include <type_traits>
|
|
|
|
#include <utility>
|
|
|
|
#include <utility>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "common/polyfill_thread.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace Common {
|
|
|
|
namespace Common {
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(__cpp_lib_hardware_interference_size)
|
|
|
|
#if defined(__cpp_lib_hardware_interference_size)
|
|
|
@ -78,7 +79,7 @@ public:
|
|
|
|
auto& slot = slots[idx(tail)];
|
|
|
|
auto& slot = slots[idx(tail)];
|
|
|
|
if (!slot.turn.test()) {
|
|
|
|
if (!slot.turn.test()) {
|
|
|
|
std::unique_lock lock{cv_mutex};
|
|
|
|
std::unique_lock lock{cv_mutex};
|
|
|
|
cv.wait(lock, stop, [&slot] { return slot.turn.test(); });
|
|
|
|
Common::CondvarWait(cv, lock, stop, [&slot] { return slot.turn.test(); });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
v = slot.move();
|
|
|
|
v = slot.move();
|
|
|
|
slot.destroy();
|
|
|
|
slot.destroy();
|
|
|
|