次のシナリオを検討してください。
boost::asio
独自のスレッドでそれぞれを介した2つの異なるネットワークポート- 1つのポートがデータを受信して処理
class DataConnection
しています-std::thread
- 1つのポートは、統計を送信するためのもの
class StatConnection
であり、std::thread
接続(およびその他の小さなデータ)をカウントするための私のアイデアは、次のようなstatic
変数を使用することでした。namespace
#include <atomic>
namespace app {
namespace status {
static std::atomic<long> counter = 0;
}
}
これはDataConnection
クラスでは問題なく機能します。ここでcounter
は、c'torをインクリメントして、値の増分を確認します。
しかしcounter
、私のStatConnection
クラスでは常に0
なぜこれが起こるのでしょうか?
私はいくつかの選択肢を試しました:
- 交換:違いはありませんでした
std::atomic<long>
。static volatile long
static
キーワードなしで名前空間を使用します。
次に、リンカーエラーが発生しました。
multiple definition of `app::status::searchtime'
./src/status/Status.o:/[...]/include/status/Status.hpp:16: first defined here
[...]
では、なぜcount
スレッド間で値が異なるのでしょうか。