Dプログラミング-並行性
並行性とは、プログラムを一度に複数のスレッドで実行することです。 並行プログラムの例は、多数のクライアントに同時に応答するWebサーバーです。 並行性はメッセージの受け渡しでは簡単ですが、データ共有に基づいている場合は非常に記述が困難です。
スレッド間で渡されるデータはメッセージと呼ばれます。 メッセージは、任意のタイプと任意の数の変数で構成できます。 すべてのスレッドにはIDがあり、メッセージの受信者を指定するために使用されます。 別のスレッドを開始するスレッドは、新しいスレッドの所有者と呼ばれます。
Dでのスレッドの開始
関数spawn()は、パラメーターとしてポインターを取り、その関数から新しいスレッドを開始します。 呼び出される可能性のある他の関数を含む、その関数によって実行される操作はすべて、新しいスレッドで実行されます。 所有者とワーカーの両方が、独立したプログラムであるかのように別々に実行を開始します。
例
上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-
Dのスレッド識別子
モジュールレベルでグローバルに使用できる_thisTid_変数は、常に現在のスレッドのIDです。 また、spawnが呼び出されたときにthreadIdを受け取ることができます。 例を以下に示します。
例
上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-
Dでメッセージを渡す
関数send()はメッセージを送信し、関数receiveOnly()は特定のタイプのメッセージを待ちます。 prioritySend()、receive()、およびreceiveTimeout()という名前の他の関数があり、これらについては後で説明します。
次のプログラムの所有者は、ワーカーにint型のメッセージを送信し、double型のワーカーからのメッセージを待ちます。 所有者が負のintを送信するまで、スレッドはメッセージを繰り返し送信します。 例を以下に示します。
例
上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-
Dで待機するメッセージの受け渡し
待機でメッセージを渡す簡単な例を以下に示します。
上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-