mutex example initialization procedure appears to be incorrectly synchronized
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
- Área
- operating-systems
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
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
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de elast0ny/shared_memory
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
elast0ny/shared_memory#119 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
elast0ny/shared_memory#114 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
elast0ny/shared_memory#110 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
elast0ny/shared_memory#108 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
elast0ny/shared_memory#107 ·
Todos los issues de elast0ny/shared_memory
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
swc-project/swc#12516 ·
Los mantenedores suelen responder en 1 día
-
app bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
mls-rs-crypto-awslc: exact aws-lc-rs =1.16.3 pin blocks rustls security updatePosiblemente ocupada @muscariello la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
[work-item] adam-adae-worsening-emergence: conform spec.yaml to the specification style contract (REQ-1280)Posiblemente ocupada @muse-yamaa-bot la tomó hoy. Abiertowork-item
Dificultad 1/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día