shared_ptr / unique_ptr в многопроцессорной среде с общей памятью

#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 предлагают для своих распределителей. Ну да ладно.