Вы хотите vars()
смешанный с pprint()
:
from pprint import pprint
pprint(vars(your_object))
Насколько мне известно, такой вещи пока нет в открытом доступе. Одна проблема, которую должен решить разработчик, заключается в том, что вам нужен безблокирующий распределитель памяти, который существует, хотя я, похоже, не могу найти ссылку прямо сейчас.
А потом появились Intel Threading Building Blocks . И какое-то время это было хорошо.
PS: вы ищете concurrent_queue и concurrent_hash_map
Отправной точкой может быть любая из статей Херба Саттера DDJ для одного производителя и потребителя или нескольких . Код, который он дает (встроенный, начиная со второй страницы каждой статьи), использует тип шаблона atomic
Код повышения скрыт в глубине межпроцессной библиотеки, но после прочтения соответствующего заголовочного файла (atomic.hpp) реализации необходимых операций сравнения и замены на знакомых мне системах внешний вид звука.
boost.lockfree - это попытка создать c ++ реализации стека lockfree и классов fifo.
After having checked most of the given answers, i can only state:
The answer is NO.
There is no such thing right that could be used right out of the box.
Если у вас есть очередь / FIFO с несколькими производителями / одним потребителем, вы можете легко сделать одну LockFree, используя SLIST или простой стек LIFO Lock Free. У вас есть второй «частный» стек для потребителя (который также может быть реализован в виде SLIST для простоты или любой другой модели стека по вашему выбору). Потребитель извлекает элементы из частного стека. Всякий раз, когда частный LIFO исчерпывается, вы выполняете Flush, а не Pop из совместно используемого параллельного SLIST (захват всей цепочки SLIST), а затем просматриваете очищенный список по порядку, помещая элементы в частный стек.
Это работает для одиночных операций. производитель / один-потребитель и для нескольких производителей / одного потребителя.
Однако это не работает для случаев с несколькими потребителями (с одним производителем или несколькими производителями).
Также, что касается хеширования столы идут, они являются идеальным кандидатом для «чередования», при котором хэш просто разделяется на сегменты, имеющие блокировку на сегменты кеша. Вот как это делает параллельная библиотека Java (с использованием 32 полос). Если у вас есть облегченная блокировка чтения-записи, к хеш-таблице можно получить одновременный доступ для одновременного чтения, и вы остановитесь только тогда, когда запись происходит на оспариваемых полосах (и, возможно, если вы разрешите увеличение хеш-таблицы).
Если вы откатываете свой собственный, убедитесь, что ваши блокировки чередуются с записями хэша, а не помещают все свои блокировки в массив рядом друг с другом, чтобы у вас меньше шансов получить ложное совместное использование.
Самое близкое, что мне известно, - это заблокированные односвязные списки Windows . Конечно, это только Windows.