返信する: 汎用質問板



オプション

参照

Thread間のデータ共有の仕組みについて
投稿者: ゲスト 投稿日時: 2013/10/3 0:00
質問するフォーラム間違えてしまい承認されなかったようなのでこちらで....汗
下記のコードのWriter._cntの挙動についての質問です。
import core.thread;
import std.stdio;
import std.concurrency;

class Writer {
  public:
    this() {
      _tg = new ThreadGroup;
      _cnt = 0;
    }

    void write_tg(string text, int timeout) {
      _tg.create({
        while (1) {
          ++_cnt;
          writeln(_cnt);
          writeln(text);
          writeln();
          Thread.sleep(dur!"seconds"(timeout));
        }
      });
    }

    void write_spawn(string text, int timeout) {
      spawn(&write, text, timeout, _cnt);
    }

  private:
    ThreadGroup _tg;
    int _cnt;
}

void write(string text, int timeout, ref int cnt) {
  while (1) {
    ++cnt;
    writeln(cnt);
    writeln(text);
    writeln();
    Thread.sleep(dur!"seconds"(timeout));
  }
}

void main() {
  Writer writer = new Writer;

  /*
  writer.write_spawn("3秒毎spawn", 3);
  writer.write_spawn("1秒毎spawn", 1);
  writer.write_spawn("10秒毎spawn", 10);
  */
  /*
  writer.write_tg("3秒毎tg", 3);
  writer.write_tg("1秒毎tg", 1);
  writer.write_tg("10秒毎tg", 10);
  */
}
上記のコードでWriter.write_tgを呼んだ場合、Writer.write_spawnを呼んだ場合と違ってWriter._cntがThread間でデータ共有されているようなのですが、これはどういった仕組みなのでしょうか?
データ共有するためにはsharedをつけるか、immutableなデータとして扱うか、の2通りしかないと思っていたのですが、この場合のWriter._cntはどのような立場にあるのでしょうか?

よろしくお願いします。
メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu