64-битный futex для условных переменных - PullRequest
0 голосов
/ 09 октября 2019

Я создаю свою собственную простую межпроцессную условную переменную около 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 токенов?

...