Меньший тип для atomi c, реализующий примитив синхронизации, такой как семафор, мьютекс или барьер - PullRequest
1 голос
/ 01 августа 2020

Примитивы синхронизации могут быть реализованы с использованием std::atomic<T>, по крайней мере, их пользовательской части. В C ++ 20 std::atomic<T>::wait они могут быть основаны только на atomi c.

Вопрос в том, стоит ли использовать типы размером с указатель или типы меньшего размера.

C + +20 std::semaphore - это пример, где максимальное значение передается как параметр шаблона, поэтому выбор может быть сделан во время компиляции, а не жестко запрограммирован.

Мои мысли на данный момент:

Я думаю, что на платформе, где futex использует указанный c размер переменной, следует просто использовать этот размер. В Windows с гибким WaitOnAdress есть место для выбора.

32-битные типы на x64 приводят к меньшему кодированию и той же эффективности, поэтому, вероятно, это путь к go. Дальнейшее сокращение до 16- и 8-битных типов, по-видимому, бесполезно (16-битные типы приводят к большей кодировке, чем 32-битные типы).

Также есть случай Windows на руке, для которого я не уверен.

Для std::semaphore возможность выбора целочисленного типа на основе max является побочным эффектом специализации двоичного семафора, а не намерением.

...