Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

mutex example initialization procedure appears to be incorrectly synchronized

Abierto
#115 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
38/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
rust

Línea de trabajo

Comienza con examples/mutex.rs, líneas 65-89, e inspecciona cómo se inicializa el mutex compartido y cómo lo cargan los propietarios y los no propietarios. Verifica el orden de sincronización alrededor de is_init y determina si el ejemplo publica de forma segura el mutex inicializado; se considera terminado cuando el procedimiento de inicialización está correctamente sincronizado.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

https://github.com/elast0ny/shared_memory/blob/fda413410857e295fa7440691a79296e84bed525/examples/mutex.rs#L65-L89

    let mutex = if shmem.is_owner() {
        // is_init.store(0, Ordering::Relaxed); // not actually needed
        // Initialize the mutex
        let (lock, _bytes_used) = unsafe {
            Mutex::new(
                raw_ptr,                                    // Base address of Mutex
                raw_ptr.add(Mutex::size_of(Some(raw_ptr))), // Address of data protected by mutex
            )
            .unwrap()
        };
        // is_init.store(1, Ordering::Relaxed); // relaxed wouldn't restrict reordering of mutex init unless i'm missing something
        is_init.store(1, Ordering::Release);
        lock
    } else {
        // wait until mutex is initialized
        // while is_init.load(Ordering::Relaxed) != 1 {} // need acquire for release store to is_init to synchronize-with load
        // could also do a relaxed loop with a acquire fence, but that adds an extra instruction in the common case
        while is_init.load(Ordering::Acquire) != 1 {
            std::hint::spin_loop();
        }
        // Load existing mutex
        let (lock, _bytes_used) = unsafe {
            Mutex::from_existing(
                raw_ptr,                                    // Base address of Mutex
                raw_ptr.add(Mutex::size_of(Some(raw_ptr))), // Address of data  protected by mutex
            )
            .unwrap()
        };
        lock
    };
Lenguaje dominante
Rust
Estrellas
442
Forks
63
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de elast0ny/shared_memory

Todos los issues de elast0ny/shared_memory

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.