1. сумма переменных и счетчик в этом коде определены как long long?Я изменил их на int, но это не дало мне аналогичного подсчета,
Не уверен, что вы подразумеваете под этим.Изменение int
на long long
для counter
и sum
(и корректировка спецификатора форматирования %
в соответствии, например, с %d
) не должны (значимо) изменять смысл программы.В x86_64 Linux вы будете использовать 32-битный счетчик вместо 64-битного.
как коды без потоков и семафоров!
Ну,нам нужно было бы увидеть другую программу, но см. ниже.
почему count получает полуслучайные значения (даже если снова установить его в нулевой цикл)?
Потому что запущены два параллельных потока.Один увеличивает счетчик, а второй сбрасывает его каждую секунду.Невозможно предсказать, сколько раз другой поток сможет увеличить счетчик.Это будет зависеть от нагрузки системы (между запусками на одном и том же компьютере) и от самой системы (между машинами, то есть от того, насколько она быстра).
Как правило, это единственный тип системы, в котором значение счетчикаможно было бы «прогнозировать», что это будет процессор без фиксированной частоты, процессор с фиксированной частотой и детерминированный планировщик / операционная система и т. д. Обычный рабочий стол не является такой машиной - полная противоположность, на самом деле!
Я бы посоветовал почитать об операционных системах, их планировщике, таймлайзинге и т. Д.