409: Updated send/sync docs r=AfoHT a=korken89



Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
This commit is contained in:
bors[bot] 2020-11-12 17:53:18 +00:00 committed by GitHub
commit 98f0a96104
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -27,31 +27,8 @@ resources.
[`Send`]: https://doc.rust-lang.org/core/marker/trait.Send.html [`Send`]: https://doc.rust-lang.org/core/marker/trait.Send.html
The `app` attribute will enforce that `Send` is implemented where required so The `app` attribute will enforce that `Send` is implemented where required so
you don't need to worry much about it. It's more important to know where you do you don't need to worry much about it. Currently all types that are passed need
*not* need the `Send` trait: on types that are transferred between tasks that to be `Send` in RTIC, however this restriction might be relaxed in the future.
run at the *same* priority. This occurs in two places: in message passing and in
shared resources.
The example below shows where a type that doesn't implement `Send` can be used.
``` rust
{{#include ../../../../examples/not-send.rs}}
```
It's important to note that late initialization of resources is effectively a
send operation where the initial value is sent from the background context,
which has the lowest priority of `0`, to a task, which will run at a priority
greater than or equal to `1`. Thus all late resources need to implement the
`Send` trait, except for those exclusively accessed by `idle`, which runs at a
priority of `0`.
Sharing a resource with `init` can be used to implement late initialization, see
example below. For that reason, resources shared with `init` must also implement
the `Send` trait.
``` rust
{{#include ../../../../examples/shared-with-init.rs}}
```
## `Sync` ## `Sync`