elast0ny / elast0ny/shared_memory

mutex example initialization procedure appears to be incorrectly synchronized

Offen
#115 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Rust
Sterne
443
Forks
63
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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

```rust
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
};
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne mit examples/mutex.rs, Zeilen 65–89, und untersuche, wie der gemeinsame Mutex initialisiert und von Besitzern und Nicht-Besitzern geladen wird. Überprüfe die Synchronisierungsreihenfolge rund um is_init und stelle fest, ob das Beispiel den initialisierten Mutex sicher veröffentlicht; abgeschlossen ist die Aufgabe, wenn der Initialisierungsvorgang korrekt synchronisiert ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rust
Bereich
operating-systems
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.