snowflake id가 이상하게 생성되는 문제 해결결

This commit is contained in:
2025-05-04 14:50:52 +09:00
parent e0a371d536
commit 8ffe3a7519
3 changed files with 26 additions and 11 deletions

View File

@@ -3,25 +3,28 @@
namespace Chattr {
Snowflake GenerateID() {
static struct _EPOCH {
_EPOCH() {
static struct EpochInitializer {
EpochInitializer() {
EPOCH = std::chrono::system_clock::now();
}
std::chrono::system_clock::time_point EPOCH;
} __EPOCH__;
} epochInitializer;
static std::mutex snowflakeGenerateMutex_;
std::lock_guard<std::mutex> lock(snowflakeGenerateMutex_);
#ifdef _WIN32
DWORD tid = GetCurrentThreadId();
#elif __linux__
pthread_t tid = pthread_self();
#endif
static int sequence = 0;
std::size_t tid;
#ifdef _WIN32
tid = static_cast<std::size_t>(GetCurrentThreadId());
#elif __linux__
tid = static_cast<std::size_t>(pthread_self());
#endif
thread_local static int sequence = 0;
Snowflake id = {};
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - __EPOCH__.EPOCH);
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - epochInitializer.EPOCH);
id.timestamp = timestamp.count();
id.instance = tid;
id.sequence = sequence++;