複数のS-function builder blockは同一プロセスで動く?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
tnksral
am 1 Jun. 2017
Kommentiert: Akihiro Yasuda
am 9 Jun. 2017
下記質問の回答を見ると、
複数のS-Functionを生成した場合、各S- Functionはそれぞれのダイナミックリンクライブラリとして作成されます。各MEX-ファイルは別プロセスとなるため、MATLABの機能では別プロセス間の変数を共有することはできません。共有するためには、OSの機能である共有メモリ(Windowsではメモリマップドファイル)を使用することになります。
と、「異なるS-functionは別プロセスで動く」ことが明記されています。 しかし、S-functionから呼び出すCコード内で、 unistd.hのgetpid()を呼び出してみたところ、 複数のS-functionが同一のプロセスIDを返しました。 (linuxでもWindowsでも同じでした)
これはS-function blockは同一プロセスで動くことを示しているのでしょうか。 異なるプロセスで動くことを示すにはどのようにしたらよいのでしょうか。
0 Kommentare
Akzeptierte Antwort
Akihiro Yasuda
am 5 Jun. 2017
Bearbeitet: Akihiro Yasuda
am 5 Jun. 2017
「異なるS-functionは別プロセスで動く」≠「同一のプロセスID」です。
getpid()を実行した際に取得されるプロセスIDはMATLAB.exeになります。
MATLAB.exe上で実行される異なるmexファイルは、それぞれ独立したダイナミックリンクライブラリであるため、変数の共有をサポートしていません。そのため、共有メモリ(Windowsではメモリマップドファイル)が代替案として提案されています。
その他には、共有させたい変数を引数としたラッパー関数を用意し、S-functionブロック間で結線させる方法が考えられます。
4 Kommentare
Akihiro Yasuda
am 9 Jun. 2017
同じダイナミックリンクライブラリを外部参照している別名のMEX-ファイルがあり、そのダイナミックリンクライブラリ内で同名のグローバル変数を用いた場合、そのグローバル変数はMEX-ファイルの外部で保持されているため、MEX-ファイル間でグローバル変数が共有されます。
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu C++ 用の MATLAB エンジン API finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!