es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se puede hacer que NonNull sea seguro para hilos en Rust?

No puedo enviar un tipo no nulo entre hilos en Rust. Necesito llamar a un método en un puntero NonNull para la API de Rust en Windows.

He intentado con Arc<Mutex<NonNull>> y Arc<Mutex<RefCell<Box<NonNull>>> pero no encuentro una forma de obtener send y sync para NonNull.

Me gustaría que el hilo se detenga y espere el mutex, así que llamar a un método o incluso mutar el tipo NonNull no debería ser un problema de subprocesos pero incluso con la verificación de préstamos en tiempo de ejecución, obtengo el error: ‘NonNull no puede ser enviado entre hilos de manera segura’
y luego una lista de:

 > se requiere debido a los requisitos en la implementación de ‘Send’

.. etc.

Estoy a punto de intentar pasar el método como dyn, pero ¿esto debería ser posible, verdad?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Windows, Rust y thread-safety, parece que estás teniendo problemas para enviar un tipo no nulo entre hilos en Rust mientras intentas llamar un método en un puntero NonNull para la API de Windows Rust.

    Has intentado usar Arc<><nonnull>> y Arc<><><><nonnull>>>>, pero no has logrado encontrar una forma de obtener envío y sincronización para NonNull.

    Te gustaría que el hilo se detuviera y esperara el mutex, por lo que llamar a un método o incluso mutar el tipo NonNull no debería ser un problema de hilos. Sin embargo, a pesar de utilizar la comprobación de préstamo en tiempo de ejecución, estás obteniendo el error: NonNull<c_void> no puede ser enviado entre hilos de manera segura, y luego una lista de requisitos debido a los requisitos en la implementación de Send.

    Estás a punto de intentar pasar el método como dyn, pero te preguntas si hay alguna manera de hacer esto funcionar sin recurrir a esa opción.

Comments are closed.