生成和调用可重入代码
为单线程或多线程环境生成并调用可重入代码
默认情况下,生成的代码为大小超过最大堆栈使用值的变量创建 static
变量,并存储在配置对象设置 StackUsageMax
中。static
变量中的数据在函数调用之间保持不变。与此类似,MATLAB® 全局变量和持久变量中的数据也在函数调用之间保持不变。因此,如果您的主函数在多个线程中执行生成的代码,则可能会出现不确定的竞态条件。
要生成更适合在多个线程中同时执行的代码,可以使用 MultiInstanceCode
配置选项。当您使用此选项时,生成的代码会将可超出本地线程存储量的数据包装到一个结构体定义中,以便您可以单独为该结构体分配线程安全内存。同样,代码生成器将持久数据和全局数据包装到它自己的内存结构体中。当不应该共享此内存时,您可以为线程使用的数据结构体分配单独的内存。
主题
可重入代码基础知识
- Reentrant Code
Reentrant code is a reusable programming routine that multiple programs can use simultaneously. - API for Generated Reusable Code
Use generated reusable code. - Specify Generation of Reentrant Code
Generate reentrant code in the MATLAB Coder™ app or at the command line. - Call Reentrant Code in a Single-Threaded Environment
Use generated reentrant code in a single-threaded environment. - Call Reentrant Code in a Multithreaded Environment
Use generated reentrant code in a multithreaded environment.
工作流
- Generate Reentrant C Code from MATLAB Code
Generate reusable, reentrant C code. - Call Reentrant Code with No Persistent or Global Data (UNIX Only)
Generate reentrant code that uses POSIX thread (pthread) libraries. - Call Reentrant Code — Multithreaded with Persistent Data (Windows Only)
Generate reentrant code that uses libraries that are specific to Windows® platforms. - Call Reentrant Code — Multithreaded with Persistent Data (UNIX Only)
Generate reentrant code that uses POSIX thread (pthread) libraries.