付録 (Delphi コンカレントプログラミング)

# 付録

## データベースとマルチスレッド

コネクションプーリングについては次の記事を参考にしてください。

 - [基礎から学べる FireDAC データアクセス再入門 (番外編) (blogs.embarcadero.com)](https://blogs.embarcadero.com/ja/firedac-tutorial-07-ja/)
 - [マルチスレッドアプリケーションでの IBX の利用 (Qiita)](https://qiita.com/ht_deko/items/5336b8cad371596bb7ea)


## Concurrent Pascal について
マルチスレッドプログラミングにおける**モニタ**という概念はエドガー・ダイクストラがアイデアを提案し、パー・ブリンチ・ハンセンと C.A.R.ホーアによって定義され、

 - [モニタ (同期) (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8B%E3%82%BF_(%E5%90%8C%E6%9C%9F))

アルフレッド・C・ハートマン (と、パー・ブリンチ・ハンセン) により **Concurrent Pascal** (1974 年) において初めて実装されました [^1]。

 - [Concurrent Pascal (Wikipedia)](https://en.wikipedia.org/wiki/Concurrent_Pascal)

これが回りまわって Delphi にやってきたというわけです (記事中で [TMonitor](https://qiita.com/ht_deko/items/9f3c7534e2ac406ba7dc#23-systemtmonitor) が紹介されています)。Concurrent Pascal のモニタ型のコードは次のような感じです。

```pascal
type
  linebuffer = monitor
  var
    contents: line;
    full: Boolean;
    sender, receiver: queue;
  procedure entry receive(var text: line);
  begin
    if not full then
      delay(receiver);
    text := contents;
    full := False;
    continue(sender);
  end;
  procedure entry send(var text: line);
  begin
    if full then
      delay(sender);
    contents := text;
    full := True;
    continue(receiver);
  end;
  begin
    full := False;
  end;
```

Concurrent Pascal には **Simula 67** から借りてきたような文法があります (クラスとか)。Concurrent Pascal の構文図は [SpringerLink の Back Matter](https://link.springer.com/book/10.1007/3-540-08240-9) で読めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/dd2703fe-527d-f7d3-d243-1cff39e0f0d0.png)

| タイトル | 著者 | ISBN-10<br>(Amazon) |出版年|
|:--|:--|:-:|:-:|
| [A Concurrent Pascal Compiler for Minicomputers](https://link.springer.com/book/10.1007/3-540-08240-9) | アルフレッド・C・ハートマン(著) | [3540082409](https://www.amazon.co.jp/dp/3540082409/)  | 1977/6 |
| The Architecture of Concurrent Programs | パー・ブリンチ・ハンセン(著) | [0130446289](https://www.amazon.co.jp/dp/0130446289/)  | 1977/12 |
| コンピュータ・サイエンス研究書シリーズ 35<br>並行動作プログラムの構造| パー・ブリンチ・ハンセン(著)<br>田中英彦(訳) | [B000J6MYTU](https://www.amazon.co.jp/dp/B000J6MYTU/)  | 1980/1/25 |

:::note
[『並行動作プログラムの構造』](https://dl.ndl.go.jp/pid/12630475)は国立国会図書館デジタルコレクションで読む事ができます。書籍の閲覧には国立国会図書館の利用者登録 ([本登録](https://www.ndl.go.jp/jp/registration/individuals_official.html)) が必要です。
:::

**See also:**

 - [Simula (DocWiki)](https://ja.wikipedia.org/wiki/Simula)
 - [マルチスレッド・プログラミング(1) (tsukuba.ac.jp)](http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2021/2021-04-16/)
 - [第2部 Concurrent Pascal (Vimeo)](https://vimeo.com/536691859)


## SuperPascal について

パー・ブリンチ・ハンセンが書いた並行処理可能な Pascal に **SuperPascal** (1993 年) があります。

**See also:**

 - [SuperPascal を動かしてみる (Qiita)](https://qiita.com/ht_deko/items/9da269fdbfa7ba8bbd99)


## 参考文献
記事を書く上で参考にした書籍です。

| タイトル | 著者 | ISBN-10<br>(Amazon) |出版年|
|:--|:--|:-:|:-:|
| [Mastering Delphi Programming: A Complete Reference Guide](https://www.packtpub.com/product/mastering-delphi-programming-a-complete-reference-guide/9781838989118) | Primož Gabrijelčič (著) | [1838989110](https://www.amazon.co.jp/dp/1838989110/) | 2019/11/26 |
| [Delphi Cookbook Third Edition](https://www.packtpub.com/product/delphi-cookbook-third-edition/9781788621304) | Daniele Spinetti (著) | [B07FNWNRSY](https://www.amazon.co.jp/dp/B07FNWNRSY/) | 2018/7/31 |
| [Delphi High Performance](https://www.packtpub.com/product/delphi-high-performance/9781788625456) | Primož Gabrijelčič (著) | [1788625455](https://www.amazon.co.jp/dp/1788625455/) | 2018/2/26 |
| [More Coding in Delphi](https://leanpub.com/morecodingindelphi) | Nick Hodges (著) | [194126610X](https://www.amazon.co.jp/dp/194126610X/) | 2015/12/06 |
| [Java 言語で学ぶデザインパターン入門 マルチスレッド編](https://www.sbcr.jp/product/4797319127/) | 結城 浩 (著) | [4797319127](https://www.amazon.co.jp/dp/4797319127/) | 2002/6/28 |
| [Delphi クイックリファレンス](https://www.oreilly.co.jp/books/4873110408/) | Ray Lischner (著), 光田 秀, 竹田 知生 (訳) | [4873110408](https://www.amazon.co.jp/dp/4873110408/) | 2001/5/1 |
| [Delphi マガジン Vol.5](https://qiita.com/ht_deko/items/b581458db5140bd078cf) [^2] | PS ネットワーク | [4939049051](https://www.amazon.co.jp/dp/4939049051/) | 1999/7/1 |
| [Delphi マガジン Vol.4](https://qiita.com/ht_deko/items/b581458db5140bd078cf) [^3] | PS ネットワーク | [4939049043](https://www.amazon.co.jp/dp/4939049043/) | 1999/5/1 |
| [Delphi マガジン Vol.3](https://qiita.com/ht_deko/items/b581458db5140bd078cf) [^4] | PS ネットワーク | [4939049035](https://www.amazon.co.jp/dp/4939049035/) | 1999/3/1 |
| Delphi 4 プログラミング技法 Vol.1 |  Xavier Pacheco (著), Steve Teixeria (著), 日向 俊二 (訳) | [489471082X](https://www.amazon.co.jp/dp/489471082X/) | 1998/12/25 |
| インサイド Windows NT 第二版 | David A. Solomon (著), 東京ネットワーク情報サービス(訳) | [4891000309](https://www.amazon.co.jp/dp/4891000309/) | 1998/9/27 |
| Inside Delphi | Ray Lischner(著), 光田 秀(訳) | [4756119514](https://www.amazon.co.jp/dp/4756119514/) | 1997/12/1 |
| Win32 マルチスレッドプログラミング | James E. Beveridge, Robert Wiener (著), インフォビジョン (訳)| [4756114040](https://www.amazon.co.jp/dp/4756114040/) | 1997/9/1 |
| Windows NT マルチスレッドプログラミング入門 | Thuan Q. Pham, Pankaj K. Garg (著), 川手 恭輔 (訳) | [4810189600](https://www.amazon.co.jp/dp/4810189600/) | 1996/12/20 |
| [Windows 95 API バイブル <1>](https://www.shoeisha.co.jp/book/detail/9784881354308) | Richard J. Simon, Michael Gouker, Brian C. Barnes (著), スリーエーシステムズ (訳), 江藤ソフトオフィス (監) | [4881354302](https://www.amazon.co.jp/dp/4881354302/) | 1996/10/31 |
| [マルチスレッドプログラミング入門](https://www.shoeisha.co.jp/book/detail/9784881354308) | Bil Lewis, Daniel J. Berg (著), 岩本 信一 (訳) | [4756116825](https://www.amazon.co.jp/dp/4756116825/) | 1996/9/31 |
| ADVANCED WINDOWS NT | Jeffrey Richter (著), 梅原 系, 長尾 高弘, 鈴木 慎司 (訳) | [4756103014](https://www.amazon.co.jp/dp/4756103014/) | 1995/1/1 |

**See also:**

 - [Inside Windows / Windows Internals の邦訳版 (Qiita)](https://qiita.com/ht_deko/private/65d34a435f70630b12bd)

# 索引
[ [← 10. ファイバー](https://qiita.com/ht_deko/items/73b34d900385f286ee36) ]  [ [↑ 目次へ](https://qiita.com/items/e8c1ff3a4c74e4c2a4f3) ]

[^1]: 『並行動作プログラムの構造』には`「1974年に Al Hartman は Sequential Pascal を用いて、Concurrent Pascal と名付けた新しいプログラミング言語のコンパイラを作成した」` 、`「Sequential Pascal および Concurrent Pascal のコンパイラは Al Hartman と筆者によって半年で設計・実装した」`とあります。
[^2]: 阿部 隆 (1999).「Delphi マルチスレッドプログラミング 応用編」『Delphi マガジン』, vol.**5**, PS ネットワーク, pp.78-94.
[^3]: 阿部 隆 (1999).「Delphi マルチスレッドプログラミング 実践編」『Delphi マガジン』, vol.**4**, PS ネットワーク, pp.58-73.
[^4]: 阿部 隆 (1999).「Delphi マルチスレッドプログラミング 基礎編」『Delphi マガジン』, vol.**3**, PS ネットワーク, pp.85-101.