返信する: 汎用質問板



オプション

参照

Re: Thread間のデータ共有の仕組みについて
投稿者: SHOO 投稿日時: 2013/10/16 22:34
>普通の変数は、デフォルトでTLSを使用しているところを暗黙の内にsharedがつくことによって共有可能にしているのでしょうか?それとも、最初からグローバルなデータセグメントのようなものを使用しているのでしょうか?

(グローバル変数やstatic変数でない)普通の変数は、スタック領域やヒープ領域に確保されますが、これらはGCに管理されているか否かにかかわらず、すべてのスレッドから参照することができます。
ので、

>最初からグローバルなデータセグメントのようなものを使用している

のほうが認識としては近いと思います。

sharedをつけるというのは、(TLSに配置されなくなることを明示するための)ストレージクラスとしてのsharedを除いて、今のところはただ型が変わるだけです。
TDPLの13.12にはアトミック操作云々メモリバリア云々の話が書いてあるけどそんな気の利いたことは現時点ではしていません。…よね?(あまりにも自信満々に書いてあるので不安になる

「shared型にすることで複数スレッド間でデータが共有され、shared型の変数を取り扱うには、ちゃんとアトミック操作やら同期制御やらを使う必要があり、そうすることではじめて複数のスレッドから操作することができるようになります。」
よりも、
「データを複数スレッド間で共有するときはshared型でマークすると判りやすくなり、shared型の変数を取り扱うときは、ちゃんとアトミック操作やら同期制御やらを使うことで、複数のスレッドから安全に操作することができます。」
のほうが正解に近いイメージですね。
メインメニュー

ログイン

ユーザー名:


パスワード:





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

Menu