Delphi Tips 
-----------------------------

0284  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/10/12 osamu rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2001/04/05 濱野 編集
メモリマネージャのマルチスレッド対応 -- IsMultiThread

以下,
http://www.borland.co.jp/interbase/tech/ib_udf/delphi_udf_2.html
からの抜粋です。Delphi のメモリマネージャをマルチスレッドで利用する際に IsMultiThread グローバル変数を使わなければならないことを解説しています。

>>>>>>>>>>>>>>>> ここから
スレッドセーフティの問題を解決するために、Inpriseはメモリ管理ルーチンをクリティカル・セクションにラップすることによってメモリ・マネージャをスレッドセーフにしました。クリティカル・セクションについて説明することは本稿の範囲を外れているので詳しくは述べませんが、共用リソースへ秩序正しくアクセスできるようにするものであるとだけ考えておいてください。
Inpriseはその際に、クリティカル・セクションはあまりよく知られていない変数IsMultiThreadがTrueに設定されている場合しか使用されないという規則を設定しました。(IsMultiThreadは、すべてのDelphiユニットによって暗黙的に使用されるユニット 'System.pas' で定義されます。)
つまりこういうことなのです。Delphiは確かにスレッドセーフですが、それは開発者がそのように指示した場合だけです。アプリケーションやライブラリで複数のスレッドを扱う可能性がある場合は、必ずIsMultiThreadをTrueに設定しなければなりません。そうでないと、そのアプリケーションやライブラリはスレッドセーフになりません。(重要:IsMultiThreadはTThreadオブジェクトを使用した場合は暗黙的に設定されます。)
マルチスレッド環境でIsMultiThreadをTrueに設定することの必要性は、いくら強調してもしすぎることはありません。
参照: [Delphi-ML:43304] <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp