Как изменить указатель общего указателя объекта, когда он занят другими потоками? - PullRequest
1 голос
/ 07 октября 2011

Итак, у нас есть общий указатель на общий массив. У нас есть N потоков, использующих данный shared_array. Какой-то генератор дал нам новый shared_array. Мы хотим позволить старым потокам использовать этот старый общий массив и просто автоматически освобождать его, когда все N первых потоков выходят из области видимости, в то время как мы хотим дать новым потокам, которые вызывают его впервые, более новый shared_array, предоставленный нашим генератором. Возможно ли с бустом и как это сделать?

Ответы [ 2 ]

4 голосов
/ 07 октября 2011

Каждый поток может содержать локальный общий указатель, который указывает на массив.

Когда они начинают работать с массивом, они просто запрашивают массив у провайдера.

Таким образом, они будут указывать на массив, который в данный момент активен. Они будут хранить этот массив до тех пор, пока не будут завершены, и этот массив будет удален, когда больше нет ссылок.
Когда предоставляется новый массив, он будет доступен, когда потоки снова запросят массив.

1 голос
/ 07 октября 2011

То, что вы описываете, - это ожидаемое использование "МТ-безопасного" (но не надежного МТ-безопасного) интеллектуального указателя с подсчетом ссылок, например, повышенных.

...