複数のS-function builder blockは同一プロセスで動く?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
tnksral
el 1 de Jun. de 2017
Comentada: Akihiro Yasuda
el 9 de Jun. de 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 comentarios
Respuesta aceptada
Akihiro Yasuda
el 5 de Jun. de 2017
Editada: Akihiro Yasuda
el 5 de Jun. de 2017
「異なるS-functionは別プロセスで動く」≠「同一のプロセスID」です。
getpid()を実行した際に取得されるプロセスIDはMATLAB.exeになります。
MATLAB.exe上で実行される異なるmexファイルは、それぞれ独立したダイナミックリンクライブラリであるため、変数の共有をサポートしていません。そのため、共有メモリ(Windowsではメモリマップドファイル)が代替案として提案されています。
その他には、共有させたい変数を引数としたラッパー関数を用意し、S-functionブロック間で結線させる方法が考えられます。
4 comentarios
Akihiro Yasuda
el 9 de Jun. de 2017
同じダイナミックリンクライブラリを外部参照している別名のMEX-ファイルがあり、そのダイナミックリンクライブラリ内で同名のグローバル変数を用いた場合、そのグローバル変数はMEX-ファイルの外部で保持されているため、MEX-ファイル間でグローバル変数が共有されます。
Más respuestas (0)
Ver también
Categorías
Más información sobre C++ 用の MATLAB エンジン API en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!