#c #multithreading #boost #shared-ptr
#c #многопоточность #повышение #общий-ptr
Вопрос:
Итак, у нас есть общий указатель на общий массив. В настоящее время у нас есть N потоков, использующих этот shared_array. Какой-то генератор выдал нам новый shared_array. Мы хотим позволить старым потокам использовать этот старый общий массив и просто автоматически освобождать его, когда все N первых потоков выходят за пределы области видимости, в то время как мы хотим предоставить новым потокам, которые вызывают его в первый раз, новый shared_array, предоставленный нашим генератором. Возможно ли это с помощью boost и как это сделать?
Ответ №1:
Каждый поток может содержать локальный общий указатель, который указывает на массив.
Когда они начинают работать с массивом, они просто запрашивают массив у поставщика.
Таким образом, они будут указывать на массив, который в данный момент активен. Они будут удерживать этот массив до тех пор, пока не будут завершены, и этот массив будет удален, когда больше не будет ссылок.
Когда предоставляется новый массив, к нему будет получен доступ, когда потоки снова запросят массив.
Ответ №2:
То, что вы описываете, — это ожидаемое использование «MT-безопасного» (но не надежного MT-безопасного) интеллектуального указателя с подсчетом ссылок, например, повышающих.