質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Delphi

DelphiはPascalを拡張してオブジェクト指向を導入したWindows, OS X,iOS,Androidのネイティブアプリケーションを開発するための言語です。旧称はObject Pascal。開発用IDE「Delphi」にあわせ現在の名前に改称されました。

Q&A

解決済

1回答

3370閲覧

Delphi Threadにて、Synchronizeは読込にも必要でしょうか

mohirain

総合スコア31

Delphi

DelphiはPascalを拡張してオブジェクト指向を導入したWindows, OS X,iOS,Androidのネイティブアプリケーションを開発するための言語です。旧称はObject Pascal。開発用IDE「Delphi」にあわせ現在の名前に改称されました。

0グッド

0クリップ

投稿2017/05/29 11:22

###Threadにて、Synchronizeは読込にも必要でしょうか
お世話になります。
DelphiでThreadを使用したいと思っています。
Thread内でデータアクセス衝突が発生しないようにするためにSynchronizeを使用すると言うことはわかったのですが、これは、読込/書込の両方で必要でしょうか。

具体的には例えば…

TForm1上のpublicなStringListの内容をThreadに読み込み(1)、 Thread内でその文字に処理をし、(2) 処理した文字をTForm1上のStringListに書き戻す(3)

といった場合、上記、(1),(3)の両方ともSynchronizeを使用すべきなのか、(3)だけで良いのか迷っています。

参考書等には(3)だけの例が多く、(1)が必要な例が余りでてこなくて困っております。

恐らく初歩的な問題なのだろうと思いますが、
ご存じの方がいらっしゃいましたらご教授願います。

###補足情報
言語Delphi 5 Learning
Win10 64bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本件は言語に関係なく「どのスレッドがそのデータへアクセスする可能性があるか」についての条件次第になると思います。参考書にある例はあくまで例なので、そのデータに接近する可能性があるコードがどのスレッドでどんな場合に動くのかを考えなくてはなりません。

例えば(1)で参照するStringListがプログラム開始時に一度だけ計算され、(2)を行うスレッドが開始される以前に設定されることが確実であり、かつ生成された後は(1)以外のどこからもアクセスされないという前提があるなら(1)はSynchronizeを通じて行う必要はありません。

一方、このStringListが例えばメインスレッドでユーザーの操作などによって値が変化するような場合を想定してみますと、(1)はSynchronizeを通じて行うべきということになるでしょう。

以上は単なる「あり得る想定の例」でしかありません。実際にどう設計するかは各々のプログラムの機能次第になります。

投稿2017/06/03 08:53

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mohirain

2017/06/05 03:04 編集

ありがとうございます。 衝突の可能性がある場合は、読込/書込どちらのケースでも必要ということですね。 初歩的な質問に丁寧に回答下さりありがとうございました。 とても良くわかりました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問