Simulink® позволяет вам запустить S-функции параллельно с многопоточным программированием, которое делает симуляции запущенными более быстро, чем последовательные запуски. Многопоточное программирование с S-функциями требует, чтобы вы сделали S-функции ориентированными на многопотоковое исполнение. Создание ориентированного на многопотоковое исполнение кода включает обеспечение, что данные, совместно использованные несколькими потоками, защищены так, чтобы данные и результаты были как ожидалось. Симуляция с S-функциями, которые не являются ориентированной на многопотоковое исполнение силой, вызывает неожиданное поведение.
S-функции C/C++ реализованы в C или C++ и встроены в разделяемые библиотеки, известные как файлы MEX. Когда Блок s-function относится к разделяемой библиотеке, MATLAB® загружает Блок s-function в процесс. То, когда несколько Блоков s-function относятся к той же разделяемой библиотеке, они также обращаются к начальной букве, совместно использовало копию библиотеки. Этот процесс приводит к нескольким Блокам s-function, совместно использующим те же данные, принадлежавшие разделяемой библиотеке. Таким образом многопоточные Блоки s-function получают доступ к тем же данным одновременно.
Кроме того, если эти S-функции относятся к тем же ресурсам, многопоточные Блоки s-function могут получить доступ к тем же ресурсам (таким как файлы) одновременно, даже когда Блоки s-function сопоставлены с различными S-функциями.
S-функция обычно рассматривается ориентированной на многопотоковое исполнение, когда она может безопасно выполнить одновременно использование нескольких потоков. Чтобы определять S-функцию как ориентированную на многопотоковое исполнение, используйте ssSetRuntimeThreadSafetyCompliance
функция. Если вы не уверены в потокобезопасности своей S-функции, используйте эти инструкции, чтобы исследовать и сделать его ориентированным на многопотоковое исполнение.
Доля данных
Определение | Проблема | Решение |
---|---|---|
S-функция относится к данным с помощью указателей (например, | Несколько потоков могут использовать указатели, чтобы получить доступ к тем же данным. Если потоки пытаются записать в ту же ячейку памяти одновременно, они нарушают потокобезопасность. Параллельные чтения от нескольких потоков безопасны, пока нет никаких записей прежде, во время, или после чтений, которые могут вызвать несвязные кэши. | Будьте осторожны при доступе к данным, совместно использованным несколькими потоками.
|
Глобальные переменные
Определение | Проблема | Решение |
---|---|---|
Глобальные переменные осуществляются обмен данными доступные в приложении. | Несколько потоков, пишущих в незащищенные разделяемые данные, не безопасны. Чтение безопасно, пока нет никаких записей прежде, во время, или после чтений, которые могут вызвать несвязные кэши. |
|
Локальная инициализация статических переменных
Определение | Проблема | Решение |
---|---|---|
Локальные статические переменные хранятся в одном месте.
| Если несколько потоков вводят функциональный осциллограф одновременно, программное обеспечение предпринимает несколько попыток записать в то же местоположение. Эта проблема содержит, даже если локальная статическая переменная является постоянной. |
|
Ресурсы
Определение | Проблема | Решение |
---|---|---|
Ресурсы являются сущностями, от которых явным образом требуют и возвращают в систему. Некоторые примеры ресурсов включают динамически выделенную память, файлы, соединения с базой данных и сетевые сокеты. Ваше приложение может должно быть управлять ресурсами. | Доступ к ресурсам от нескольких потоков не может быть ориентирован на многопотоковое исполнение, таков как чтение и запись в файл от нескольких потоков. Даже если эти операции ориентированы на многопотоковое исполнение, они не могут произвести ожидаемые результаты. | Будьте осторожны когда управление ресурс. Потокобезопасность ресурса зависит от своей реализации. Для получения дополнительной информации о технических требованиях потокобезопасности, см. документацию ресурса. Опционально, можно охранять доступ к ресурсу с помощью механизма, такого как взаимное исключение. |
Повторная входимость
Определение | Проблема | Решение |
---|---|---|
Функция повторно используема, если безопасно вызвать многократно от того же потока (рекурсивно). Например, | Вызывание неповторно используемой функции от нескольких потоков не может быть безопасным. | Сделайте свою функцию повторно используемой. Например:
|
mexCallMATLAB
Определение | Проблема | Решение |
---|---|---|
S-функция может вызвать MATLAB с помощью | Код Simulink, который обрабатывает | Не вызывать |
Исключение свободный код
Определение | Проблема | Решение |
---|---|---|
S-функция является исключением, свободным, пока ни одна из его стандартных подпрограмм, когда названо, не имеет потенциал долгого перехода. Для получения дополнительной информации об исключении свободные S-функции, смотрите Исключение Свободный Код. | Когда S-функция не является свободным исключением, его стандартные подпрограммы косвенно называются через | Исследуйте свою S-функцию на прыжки в длину. Если нет ни одного, не отмечает S-функцию как исключение свободное использование Если S-функция выдает исключение, но использует блок попытки/выгоды, чтобы отловить исключение, что S-функция безопасна. |
Гонка данных
Определение | Проблема | Решение |
---|---|---|
Гонка данных происходит, когда выход вашего приложения зависит от порядка выполнения, таким образом что поведение ваших изменений приложений между выполнением. | Приложение может иметь неожиданное поведение. | Рассмотрите одно из следующего:
|
Энергозависимый
Определение | Проблема | Решение |
---|---|---|
| Приложения могут по ошибке использовать | Не используйте |
Ошибочное состояние
Определение | Проблема | Решение |
---|---|---|
Использование S-функций |
| Используйте ориентированное на многопотоковое исполнение |
ssSetLocalErrorStatus
| ssGetLocalErrorStatus