#include "common.h"
|
#include "squeue.h"
|
using namespace std;
|
|
class Item {
|
public:
|
|
long pic;
|
long info;
|
Item(int _pic = 0, int _info = 0) noexcept : pic(_pic), info(_info) {}
|
};
|
|
|
|
int main () {
|
void * shmp;
|
int first = mm_init(sizeof(SQueue<struct Item>), &shmp);
|
int b = 5;
|
std::atomic<int> a(b);
|
|
if (a.compare_exchange_weak(
|
b,
|
b + 1,
|
std::memory_order_release,
|
std::memory_order_relaxed) ) {
|
|
cout << "true:" << a.load() << endl;
|
} else {
|
cout << "false: " << b << endl;
|
}
|
|
|
|
Item item(1,1);
|
//item.pic = 0;
|
//item.info = 0;
|
std::atomic<Item > aitem;
|
aitem.store(item, std::memory_order_relaxed);
|
|
Item item1(1, 1);
|
|
Item item2(2, 2);
|
// item2.pic = 0;
|
// item2.info = 0;
|
|
|
if (aitem.compare_exchange_strong(item1,
|
Item(2, 2),
|
std::memory_order_release,
|
std::memory_order_relaxed) ) {
|
cout << "true:" << aitem.load( std::memory_order_relaxed).pic << endl;
|
|
} else {
|
cout << "false: " << aitem.load( std::memory_order_relaxed).pic << endl;
|
}
|
|
std::atomic<Item > aitem2;
|
cout << "false: " << aitem2.load( std::memory_order_relaxed).pic << endl;
|
|
|
std::atomic<Pointer<Item> > Head; // pointer to front of Queue
|
std::atomic<Pointer<Item> > Tail; // pointer to rear of Queue
|
Node<Item> *node = new Node<Item>;
|
Pointer<Item> ptr(node, 0);
|
|
Head.store(ptr, std::memory_order_relaxed);
|
Tail.store(ptr, std::memory_order_relaxed);
|
|
|
Pointer<Item> tail = Tail.load(std::memory_order_relaxed);
|
cout << "node addr " << node << " next addr " << &(tail.ptr->next) << endl;
|
Pointer<Item> next = (tail.ptr->next).load(std::memory_order_relaxed);
|
// if ((tail.ptr->next).compare_exchange_weak(next,
|
// Pointer<T>(node, next.count+1),
|
// std::memory_order_release,
|
// std::memory_order_relaxed) ) {
|
|
// }
|
|
return 0;
|
}
|