Рассмотрим следующий сценарий:
boost::asio
каждый в своем потокекласс DataConnection
завернутый в std::thread
class StatConnection
также завернутый в std::thread
Для подсчета соединений (и других небольших данных штук) моя идея состояла в том, чтобы использовать статическую
переменную внутри пространства имен
, например:
#include <atomic>
namespace app {
namespace status {
static std::atomic<long> counter = 0;
}
}
Это прекрасно работает для класса DataConnection
. Здесь я увеличиваю счетчик в c'tor и вижу увеличение значения.
Но counter
в моем классе StatConnection
всегда 0
Почему это может произойти?
Я пробовал некоторые альтернативы:
std::atomic
на static volatile long
: ничего не изменилось.static
.Затем я получил ошибки компоновщика:
multiple definition of `app::status::searchtime'
./src/status/Status.o:/[...]/include/status/Status.hpp:16: first defined here
[...]
Так почему же значение count
различается между потоками?