#struct #rust
#структура #Ржавчина
Вопрос:
В настоящее время я внедряю свою первую библиотеку в Rust, и, как и в случае со многими разработчиками, использующими другие языки, такие как Java и т.д. Я изо всех сил пытаюсь найти правильные решения для общих шаблонов / вариантов использования в Rust.
В моей библиотеке Rust есть несколько структур. Многие из них должны иметь доступ к некоторым общим параметрам конфигурации, которые необходимы для их работы. Например:
pub struct A {
pub context: Context
}
pub struct B {
pub context: Context
}
pub struct Context {
pub dbUri: String
}
Контекст будет передан каждой структуре один раз при инициализации структуры. Значения атрибутов контекста могут изменяться во время выполнения, что должно сделать эти изменения доступными для любой зависимой структуры. Структуры должны иметь возможность вносить изменения в контекст, если требуется. В будущем может потребоваться сделать контекст доступным для разных потоков.
Лучшее решение, которое я смог найти до сих пор, — это использовать мьютекс, завернутый в Arc, как описано здесь .
Я хотел бы знать, является ли это правильным способом реализации моего требования и каковы другие доступные варианты?
Комментарии:
1.
Arc<Mutex<Context>>
кажется, это решает вашу проблему, поэтому мне не совсем понятно, что вы ищете.2. в зависимости от ваших ограничений памяти может быть достаточно клонирования контекста (или просто подструктур контекста, которые требуются компоненту) (в случае, если он неизменяем, как кажется в вашем примере)
3. Вы также можете использовать
Rc<RefCell>
, если вам не нужен доступ из нескольких потоков. Рассмотрите возможность использования мьютекса изparking_lot
, если вы заботитесь о производительности (или не нуждаетесь в функциональности отравления).