10.2 Sync

# Sync

La section 5.7 a introduit les fonctions `cue` et `sync` lorsque nous rencontrons des problèmes de synchronisation de fils d'exécution. Ce qui n'y était pas expliqué était qu'il s'agit du système d'État du Temps qui permet cette fonctionnalité. Enfaite, la fonction `set` est une variation de `cue` et est construite sur la même fonctionnalité de base qui est d'insérer de l'information dans le système d'État du Temps. De plus, `sync` a été créé d'une façon qui lui permet de travailler parfaitement avec l'État du Temps - toute information que nous prévoyons stocker dans l'État du Temps, nous pouvons la synchroniser.

## Attendre pour les événements

Regardons rapidement comment utiliser `sync` pour attendre que de nouveaux événements soient ajoutés à l'État du Temps :

```
in_thread do
  sync :foo
  sample :ambi_lunar_land
end
sleep 2
set :foo, 1
```

Dans cet exemple, nous commençons par créer un fil d'exécution qui attend pour qu'un événement `:foo` soit ajouté à l'État du Temps. Après la déclaration du fil d'exécution, nous dormons pour deux rythmes et nous `set` `:foo` à `1`. Cela relâche ensuite le `sync` qui se rend ensuite à la prochaine ligne qui est de déclencher l'exemple `:ambi_lunar_land`.

Noter que `sync` attend toujours pour *des événements futurs* et qu'il bloque le fil d'exécution actuel en attendant ce nouvel événement. Également, il va hériter du temps logique du fil d'exécution qui est déclenché par `set` ou `cue`, donc il peut être utilisé également pour synchroniser le temps.

## Transférer des valeurs dans le Futur

Dans l'exemple ci-dessus, nous avons affecté `1` à `:foo` et en avons rien fait. Nous pouvons obtenir cette valeur à partir du fil d'exécution en appelant `sync` :

```
in_thread do
  amp = sync :foo
  sample :ambi_lunar_land, amp: amp
end
sleep 2
set :foo, 0.5
```

Notez que les valeurs transférées au travers de `set` et `cue` doivent être protégées des fils d'exécution - c'est-à-dire des anneaux immuables, des nombres, des symboles ou des chaînes de caractères fixes. Sonic Pi lancera une erreur si la valeur que vous essayez de stocker dans l'État du Temps n'est pas valide.
