Mam wiele zdarzeń przetwarzania wątków. Chcę przypisać nanosekundowy znacznik czasu do każdego zdarzenia. Jednak musi to być unikalny identyfikator. Tak więc, w tym dziwnym przypadku, że dwa zdarzenia przychodzą tak, że mają przypisany ten sam znacznik czasu, chcę, aby jeden z nich był inkrementowany o jedną nanosekundę. Biorąc pod uwagę, że prawdziwa precyzja nie jest na poziomie nanosekund, to jest ok, jeśli chodzi o znacznik czasu systemu.Wysoce wydajny unikalny znacznik czasu dla wielu wątków w Haskell
W jednym wątku jest to banalny problem. Ale w wielu wątkach staje się trudniejsze. Wydajność jest absolutnie kluczowa, więc pomysł naiwnej synchronizacji na typowym typie generatora id wydaje się, że blokowałby on zbyt wiele.
Czy istnieje podejście, które rozwiązuje ten problem przy minimalnym lub zerowym blokowaniu?
@ehird: Nie wprowadzaj nietrywialnych zmian do mojego posta, zamiast tego dodaj komentarz, jeśli masz coś do dodania. –
Przepraszam, czułem, że zmiana, którą wprowadziłem, była dość banalna, ale potem zobaczyłem dwa dodatkowe błędy przed zapisaniem. Obecnie 'getUnique' zawsze zwraca' ⊥', a 'counter' może być wstawiane do innych wyrażeń, powielanie zmiennej i łamanie kodu.Dodatkowo, jeśli oba te elementy zostałyby naprawione, to 'getUnique' miałoby wyciek przestrzeni, spowodowany uderzeniami, które następowałyby po kolejnych wykonaniach. (BTW, standardowy moduł "Data.Unique" faktycznie zapewnia już to API.) – ehird
@ehird: Dokładnie tego rodzaju informacje chciałem wiedzieć, dzięki. –