で異なる次szenario検討:boost::asio
を介して自身のスレッドで グローバル変数 - 値がスレッド
- 2つの異なるネットワークポートを - に包ま
class DataConnection
std::thread
- 1ポートはまたのために
std::thread
に包まれた統計class StatConnection
を送信するためであります
#include <atomic>
namespace app {
namespace status {
static std::atomic<long> counter = 0;
}
}
これはDataConnection
クラスのために正常に動作します:接続(および他の小さなデータの断片)をカウント私の考えは次のようにnamespace
内static
変数を使用することでした。ここで私は012'をc'torに増やし、値の増分を見る。私StatConnection
クラスで
しかしcounter
は常に0
あるなぜこれが起こることができますか?ためstd::atomic<long>
を交換
- :違いを行っていませんでした
は、私はいくつかの選択肢を試してみました。
static
キーワードなしの名前空間を使用しています。
それから私は、リンカエラーを得た:
multiple definition of `app::status::searchtime'
./src/status/Status.o:/[...]/include/status/Status.hpp:16: first defined here
[...]
なぜスレッド間の異なるcount
の値がありますか?
ホ:
そして1つの変換単位で変数を定義?名前空間の静的メンバーですか?クラスの静的メンバーだけではないのはなぜですか? – Griwes
クラスは短時間しか存在せず、boost :: asio関連のクラスはstd :: thread経由でn回起動されます。だから私はそれを名前空間に入れることがこのことを別にしていると思った。しかし、静的なメンバーが私がそれを調べる問題を解決する可能性があります。名前空間のアプローチがうまくいかなかった理由はまだ分かりません。 –