Высокопроизводительный уникальный идентификатор временной метки для нескольких потоков в Haskell

У меня есть несколько потоков, обрабатывающих события. Я хочу присвоить каждому событию наносекундную временную метку. При этом она должна быть уникальной. Поэтому в случае, если два события придут так, что им будет присвоена одна и та же временная метка, я хочу, чтобы одна из них была увеличена на одну наносекунду. Учитывая, что реальная точность не находится на уровне наносекунд, это нормально с точки зрения природы временной метки системы.

В одном потоке это тривиальная проблема. Но в нескольких потоках она становится более сложной. Производительность абсолютно критична, поэтому идея наивной синхронизации на типичном типе генератора id кажется слишком сложной.

Есть ли какой-то подход, который решает эту проблему с минимальной блокировкой или вообще без нее?

6
задан justin 29 January 2012 в 07:46
поделиться