Kann gefangene äußere Variable in einem 'Fn'-Abschluss nicht als veränderlich ausleihen

8

Dies ist mein erster Tag mit Rust, aber ich versuche etwas Triviales zu machen, und ich stecke fest.

Was ich versuche, ist, eine Struktur zu einem Vektor hinzuzufügen und das Ergebnis zurückzugeben. Ich versuche, einen sehr einfachen REST-Dienst zu erstellen, der beim Speichern die Daten im Speicher speichert und bei einem GET alle Daten im JSON-Format zurückgibt.

Dies ist mein aktueller Code:

%Vor%

Ich habe dies versucht Lösung mit einer RefCell, aber dann bekomme ich den Fehler, dass die Eigenschaft Sync nicht für Vec<reservation::Reservation>

implementiert ist     
Erik Pragt 31.05.2015, 15:20
quelle

1 Antwort

13

Dies ist ein sehr gutes Beispiel dafür, wie Rust Sie vor der Ungewissheit schützt.

Wenn Sie darüber nachdenken, wäre es in Ihrem aktuellen Code möglich, dass mehrere Threads gleichzeitig versuchen, reservations ohne irgendeine Art von Synchronisation zu mutieren. Dies ist ein Datenrennen und Rust wird sich darüber beschweren.

Eine mögliche Lösung wäre, den reservations Vektor in ein Mutex zu verpacken, um die Synchronisation zu erhalten. Sie benötigen auch Arc (atomare Referenzzählung), da Rust nicht beweisen kann, dass reservations länger leben wird als die Threads.

Mit diesen Änderungen sollte Ihr Code wie folgt aussehen:

%Vor%

Sie können in der Dokumentation nach weiteren Informationen zu Mutex und Arc .

    
aochagavia 31.05.2015, 17:12
quelle

Tags und Links