複数のS-function builder blockは同一プロセスで動く?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
tnksral
le 1 Juin 2017
Commenté : Akihiro Yasuda
le 9 Juin 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 commentaires
Réponse acceptée
Akihiro Yasuda
le 5 Juin 2017
Modifié(e) : Akihiro Yasuda
le 5 Juin 2017
「異なるS-functionは別プロセスで動く」≠「同一のプロセスID」です。
getpid()を実行した際に取得されるプロセスIDはMATLAB.exeになります。
MATLAB.exe上で実行される異なるmexファイルは、それぞれ独立したダイナミックリンクライブラリであるため、変数の共有をサポートしていません。そのため、共有メモリ(Windowsではメモリマップドファイル)が代替案として提案されています。
その他には、共有させたい変数を引数としたラッパー関数を用意し、S-functionブロック間で結線させる方法が考えられます。
4 commentaires
Akihiro Yasuda
le 9 Juin 2017
同じダイナミックリンクライブラリを外部参照している別名のMEX-ファイルがあり、そのダイナミックリンクライブラリ内で同名のグローバル変数を用いた場合、そのグローバル変数はMEX-ファイルの外部で保持されているため、MEX-ファイル間でグローバル変数が共有されます。
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur C++ 用の MATLAB エンジン API dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!