Thread間のデータ共有の仕組みについて
5件表示
すべてのコメント一覧へ
投稿ツリー
-
Thread間のデータ共有の仕組みについて (ゲスト, 2013/10/3 0:00) «
-
Re: Thread間のデータ共有の仕組みについて (SHOO, 2013/10/16 1:39)
-
Re: Thread間のデータ共有の仕組みについて (ゲスト, 2013/10/16 21:22)
-
Re: Thread間のデータ共有の仕組みについて (SHOO, 2013/10/16 22:34)
-
Re: Thread間のデータ共有の仕組みについて (ゲスト, 2013/10/16 23:45)
-
-
-
-
ゲスト
質問するフォーラム間違えてしまい承認されなかったようなのでこちらで....汗
下記のコードのWriter._cntの挙動についての質問です。
上記のコードでWriter.write_tgを呼んだ場合、Writer.write_spawnを呼んだ場合と違ってWriter._cntがThread間でデータ共有されているようなのですが、これはどういった仕組みなのでしょうか?
データ共有するためにはsharedをつけるか、immutableなデータとして扱うか、の2通りしかないと思っていたのですが、この場合のWriter._cntはどのような立場にあるのでしょうか?
よろしくお願いします。
下記のコードの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);
*/
}
データ共有するためにはsharedをつけるか、immutableなデータとして扱うか、の2通りしかないと思っていたのですが、この場合のWriter._cntはどのような立場にあるのでしょうか?
よろしくお願いします。
投票数:0
平均点:0.00
返信する