#include <unrelacy.h>
+#include <atomic>
+#include <mutex>
class eventcount
{
public:
- eventcount()
- : count(0)
- , waiters(0)
- {}
+ eventcount() : waiters(0)
+ {
+ count = 0;
+ }
void signal_relaxed()
{
private:
std::atomic<unsigned> count;
rl::var<unsigned> waiters;
- mutex guard;
+ std::mutex guard;
condition_variable_any cv;
void signal_impl(unsigned cmp)
if (cmp & 0x80000000)
{
guard.lock($);
- while (false == count.compare_swap(cmp,
+ while (false == count.compare_exchange_weak(cmp,
(cmp + 1) & 0x7FFFFFFF, std::memory_order_relaxed));
unsigned w = waiters($);
waiters = 0;
+#include <threads.h>
+
#include "queue.h"
-struct spsc_queue_test : rl::test_suite<spsc_queue_test, 2>
-{
- spsc_queue<int> q;
+spsc_queue<int> q;
void thread(unsigned thread_index)
{
RL_ASSERT(11 == d);
}
}
-};
int main()
{
- rl::simulate<spsc_queue_test>();
+ thrd_t A, B;
+ thrd_create(&A, (thrd_start_t)&thread, (void *)0);
+ thrd_create(&B, (thrd_start_t)&thread, (void *)1);
+ thrd_join(A);
+ thrd_join(B);
+ return 0;
}