#c #embedded
#c #встроенный
Вопрос:
Я работаю над многопроцессорным SoC. Существует несколько процессоров (асимметричная многопроцессорная обработка), все они имеют общий доступ к основному пулу памяти, но с некоторой локальной памятью, которую другие процессоры не видят. Общая память доступна по одному и тому же адресу на всех процессорах.
Мы хотим использовать буферы с подсчетом ссылок и т. Д. чтобы лучше контролировать время жизни буферов (буферы часто передаются по цепочкам обработки и через границы процессора), но нам нужно, чтобы механизм потокобезопасности был более чем потокобезопасным; он должен быть безопасным для процессора.
Существует ли механизм для предоставления std ::shared_ptr или std ::unique_ptr новых методов «распыления», которые позволили бы мне пересечь границу процессора? Или я смотрю на сворачивание своего собственного? (что мне, возможно, придется делать в любом случае, в зависимости от того, какие «скрытые» выделения происходят в версиях std.
Комментарии:
1. Вам необходимо проверить техническую документацию вашей конкретной реализации. Ничего подобного не входит в сферу действия стандарта C , но ваша конкретная реализация C , вероятно, предоставит для этого какие-то специфические для платформы функции.
2. Сам по себе
std::shared_ptr
даже не является полностью атомарным в рамках одного процесса. В C 20 вы можете решить эту проблему, но она выполняется только в рамках одного процесса.std::atomic<std::shared_ptr>>
3. @SamVarshavchik да, я просто надеялся, что есть способ обеспечить механизм распыления, аналогичный тому, как некоторые классы std предлагают для своих распределителей. Ну да ладно.