複数のS-function builder blockは同一プロセスで動く?
3 次查看(过去 30 天)
显示 更早的评论
下記質問の回答を見ると、
複数の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 个评论
采纳的回答
Akihiro Yasuda
2017-6-5
编辑:Akihiro Yasuda
2017-6-5
「異なるS-functionは別プロセスで動く」≠「同一のプロセスID」です。
getpid()を実行した際に取得されるプロセスIDはMATLAB.exeになります。
MATLAB.exe上で実行される異なるmexファイルは、それぞれ独立したダイナミックリンクライブラリであるため、変数の共有をサポートしていません。そのため、共有メモリ(Windowsではメモリマップドファイル)が代替案として提案されています。
その他には、共有させたい変数を引数としたラッパー関数を用意し、S-functionブロック間で結線させる方法が考えられます。
4 个评论
Akihiro Yasuda
2017-6-9
同じダイナミックリンクライブラリを外部参照している別名のMEX-ファイルがあり、そのダイナミックリンクライブラリ内で同名のグローバル変数を用いた場合、そのグローバル変数はMEX-ファイルの外部で保持されているため、MEX-ファイル間でグローバル変数が共有されます。
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 C++ 用の MATLAB エンジン API 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!