Я создаю свою собственную простую межпроцессную условную переменную около futex
. По техническим причинам я не могу использовать pthread_cond_t
.
futex
использует 32-битное значение для синхронизации, но мне нужно 64-битное.
Linux futex дляУ 64-битного есть фрагмент от Линуса Торвальдса, в котором говорится, что 64-битный futex не нужен, поскольку вы можете использовать 32-битный futex и другие неатомарные данные.
Я пропускаюpattern.
Мой упрощенный код для 32-битного токена:
// With 32-bit token.
typedef atomic_int ftx_t;
void futex_tkn_wait(ftx_t* ftx, int32_t tkn, mtx_t* mtx) {
atomic_store(ftx, tkn);
mtx_unlock(mtx),
futex_wait(ftx, tkn);
mtx_lock(mtx);
}
void futex_tkn_wake(ftx_t* ftx, int32_t tkn, mtx_t*) {
atomic_store(ftx, tkn);
futex_wake(ftx);
}
Как мне обновить код для получения int64_t
токенов?