Я бы сказал, что это упражнение в комбинаторике, которое я лично не собираюсь выполнять, однако хочу пояснить, что это НЕ правильный способ заставить потоки выполнять это f()
,Проблема состоит в том, что реализация operator++
не является отдельной инструкцией, что означает, что в середине одного вызова к operator++
она может переключать контекст и делать еще один f()
в другом потоке.Это может привести к повреждению вашей переменной i
.
Поэтому определение возможных значений i
без надлежащей синхронизации бесполезно, поскольку это может быть любое количество значений, реальных или нереальных, поскольку все может испортиться.