Skip to content
Snippets Groups Projects
Commit 5cd4a67c authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added beginning of concurrency

parent 66fb4e31
Branches
No related tags found
No related merge requests found
Pipeline #
[package]
name = "concurrent"
version = "0.1.0"
authors = ["Orestis Malaspinas <orestis.malaspinas@hesge.ch>"]
edition = "2018"
[dependencies]
use std::thread;
fn main() {
let loc = thread::spawn( || {
"world"
});
println!("Hello {}!", loc.join().unwrap());
let mut v = Vec::new();
let loc = thread::spawn(move || {
v.push(1);
v
});
println!("{:?}", loc.join().unwrap());
}
...@@ -180,7 +180,7 @@ Ce qui se passe en mémoire: ...@@ -180,7 +180,7 @@ Ce qui se passe en mémoire:
## En pratique (3/3) ## En pratique (3/3)
En C++ une sytaxe similaire a un effet complètement différent En C++ une syntaxe similaire a un effet complètement différent
``` ```
void do_something(notebook: vector<string>) { void do_something(notebook: vector<string>) {
...@@ -324,7 +324,7 @@ fn main() { ...@@ -324,7 +324,7 @@ fn main() {
![](figs/mem_vec_mut_borrowing.svg){#fig:mem_vec_borrowing width=70%} ![](figs/mem_vec_mut_borrowing.svg){#fig:mem_vec_borrowing width=70%}
La référence est **vérouillée** personne d'autre ne peut modifier ou lire les données. La référence est **verrouillée** personne d'autre ne peut modifier ou lire les données.
## En pratique (2/2) ## En pratique (2/2)
...@@ -357,9 +357,21 @@ fn main() { ...@@ -357,9 +357,21 @@ fn main() {
## Les deux lois de l'emprunt ## Les deux lois de l'emprunt
1. On peut avoir autant de références **immutables** qu'on le shoutaire sur des données. 1. On peut avoir autant de références **immutables** qu'on le souhaite sur des données.
2. On ne peut avoir **une seule** référence mutable sur des données. 2. On ne peut avoir **une seule** référence mutable sur des données.
## Les lois de la propriété et de l'emprunt
Garantissent (presque toujours):
- Le *aliasing* et la *modification de données* en même temps.
- Le *double-free*
- Le *use-after-free*,
. . .
- Donc: pas de *seg-faults.
# `Unsafe` Rust # `Unsafe` Rust
## Toute règle est faite pour être contournée ## Toute règle est faite pour être contournée
...@@ -369,7 +381,24 @@ fn main() { ...@@ -369,7 +381,24 @@ fn main() {
- En bon Rust ils doivent être rares (4% du code de `rustc`). - En bon Rust ils doivent être rares (4% du code de `rustc`).
- Exemple : `raw pointer` - Exemple : `raw pointer`
# Fearless concurrency
## Data race
Les "data-race" surviennent quand:
1. Partage de données.
2. Mutation.
3. Pas d'ordre d'exécution.
. . .
Le partage des données et la mutation est incompatible en Rust.
## Rust prévient à la compilation
- Les accès concurrents.
-
# And many more # And many more
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment