情報詳細Q:HALCONのオペレーターはマルチスレッドに対応していますか?A:オペレーターごとに対応状況が異なります。マルチスレッド実行時の挙動については、以下の4タイプがございます。====【マルチスレッドタイプ】 大きく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であるけれども特定のオペレータとは同時に呼ぶことを避けるべきとなります。 つまり書き込み中に読み込むと危ない可能性があるといった内容となります。====どちらに該当するかは各オペレーターヘルプの「実行情報」に記載されております。添付ファイルHALCOCNマルチスレッドタイプ一覧.txtタイトルHALCONのマルチスレッド実行についてURL 名000007874公開状況公開済み検証状況公開済み