TD_READ

待ち行列を論理的に回復可能として定義すると、TD_READの待機が発生することがあります。タスクは、他のタスクが待ち行列に書き込んでいる間に、同じ待ち行列からデータを読み取ることができます。この場合、読み取りを行うタスクがその待ち行列の読み取りエンキューを、書き込みを行うタスクが書き込みエンキューを保持します。待ち行列からの読み取りを行うタスクは、すでにコミットされたデータのみを読み取り可能です。待ち行列に書き込み中のデータは、書き込みエンキューを保持しているタスクが変更をコミットし、待ち行列の書き込み側からデキューするまでは、読み取りできません。

タスクが、論理的に回復可能な待ち行列からまだコミットされていないデータを読み取ろうとすると、そのタスクは資源タイプTD_READを待機して一時停止状態になります。修飾子から、待ち行列の名前がわかります。一時停止状態のタスクは、書き込みエンキューを保持するタスクが変更をコミットするまで、強制的に待機させられます。

ほとんどの場合、タスクが長時間待機することはありません。しかし、書き込みエンキューを保持するタスクで(関連するUOWが待避する原因となる)問題が発生し、待ち行列にWAIT=YESとWAITACTION=QUEUE属性が定義されている場合は、待機時間が長引く可能性があります。

データが待ち行列にコミットされるのを待機しないようにする場合は、READQ TD要求にNOSUSPENDを指定してください。これにより、アプリケーションにQBUSYが返され、タスクが待機しなくなります。