// A thread-local qset and queue. It provides an uncontended staging // area for completed buffers, to be flushed to the shared qset en masse. class G1RedirtyCardsLocalQueueSet : private PtrQueueSet { class Queue : public PtrQueue { public:
Queue(G1RedirtyCardsLocalQueueSet* qset);
~Queue() NOT_DEBUG(= default);
};
// Transfer all completed buffers to the shared qset. void flush();
};
// Card table entries to be redirtied and the cards reprocessed later. // Has two phases, collecting and processing. During the collecting // phase buffers are added to the set. Once collecting is complete and // processing starts, buffers can no longer be added. Taking all the // collected (and processed) buffers reverts back to collecting, allowing // the set to be reused for another round of redirtying. class G1RedirtyCardsQueueSet : public PtrQueueSet {
DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, 0);
BufferNode::Stack _list;
DEFINE_PAD_MINUS_SIZE(2, DEFAULT_CACHE_LINE_SIZE, sizeof(size_t)); volatile size_t _entry_count;
DEFINE_PAD_MINUS_SIZE(3, DEFAULT_CACHE_LINE_SIZE, sizeof(BufferNode*));
BufferNode* _tail;
DEBUG_ONLY(mutablebool _collecting;)
// Collect buffers. These functions are thread-safe. // precondition: Must not be concurrent with buffer processing. virtualvoid enqueue_completed_buffer(BufferNode* node); void add_bufferlist(const BufferNodeList& buffers);
// Processing phase operations. // precondition: Must not be concurrent with buffer collection.
BufferNode* all_completed_buffers() const;
BufferNodeList take_all_completed_buffers();
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.