情報詳細Q:HALCONのマルチスレッドオペレータのreentrancy(リエントラント)に関して詳しい内容を教えてください。A:HALCONのオペレータのreentrancy(リエントラント)に関して下記に記載しております。マルチスレッドプログラミングではオペレータのマルチスレッドタイプとマルチスレッドスコープに注意が必要となりますのでそちらについてご説明致します。 【マルチスレッドタイプ】 大きく4種類reentrant(リエントラント), mutual(相互的), exclusive(排他的), independent(独立)があります。説明の 背景として、2つのスレッドでそれぞれHALCONオペレータを実行することを イメージして頂ければと思います。 - independent(独立)とは このタイプのオペレータは、他のスレッドでどのようなオペレータが呼ばれて いても並列して同時に実行可能です。つまり、他スレッドの影響なく処理が実行 され、他の処理を待つといった事はありません。このタイプのオペレータは tuple処理が当てはまります。 - exclusive(排他的)とは このタイプのオペレータは、他のスレッドで何らかのオペレータが実行されて いる場合、その処理が終わるまで待ちます。逆も同様で、exclusiveなオペレータ 実行中であれば他の処理はブロックされます。ただし、independentタイプは影響 を受けず同時に実行可能です。つまりexclusiveタイプのオペレータは基本的に 同時に1つしか呼ばれません。例としては、create_**やclear_***がこれに該当します。 - mutual(相互的)とは このタイプのオペレータは自分自身(同じオペレータ)を同時に1つしか呼ぶ ことが出来ず、他のオペレータとは同時に実行することが可能です。つまり 二つのスレッドでそれぞれmutualタイプの同じオペレータを実行すると片方が 終了するまで他方はブロックされます。傾向はみられませんがcombine_roads_xld やpouringが該当します。 - reentrant(リエントラント)とは このタイプのオペレータは、exclusiveタイプのオペレータを除き、他の オペレータや自分自身(同じオペレータ)と同時に挙動可能です。なお、 このreentrantの一種として" single write multiple read "があります。 このタイプは、readやwriteに関するオペレータとなり、 reentrantであるけれども特定のオペレータとは同時に呼ぶことを避けるべきとなります。 つまり書き込み中に読み込むと危ない可能性があるといった内容となります。 【マルチスレッドスコープ】 グローバルとローカルの2種類です。ローカルのオペレータは、基本的に 表示系のオペレータとなり、ある特定のスレッドだけで呼ぶことを推奨 しています。つまり、複数のスレッドから呼ばれるとデッドロックが生じる オペレータがこのローカルタイプになり、それ以外の問題が起きない オペレータはグローバルタイプとなります。 添付ファイルタイトルHALCONマルチスレッドに関する情報URL 名000005625公開状況公開済み検証状況公開済み