#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), &shmp); int b = 5; std::atomic 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 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 aitem2; cout << "false: " << aitem2.load( std::memory_order_relaxed).pic << endl; std::atomic > Head; // pointer to front of Queue std::atomic > Tail; // pointer to rear of Queue Node *node = new Node; Pointer ptr(node, 0); Head.store(ptr, std::memory_order_relaxed); Tail.store(ptr, std::memory_order_relaxed); Pointer tail = Tail.load(std::memory_order_relaxed); cout << "node addr " << node << " next addr " << &(tail.ptr->next) << endl; Pointer next = (tail.ptr->next).load(std::memory_order_relaxed); // if ((tail.ptr->next).compare_exchange_weak(next, // Pointer(node, next.count+1), // std::memory_order_release, // std::memory_order_relaxed) ) { // } return 0; }