Sync and Send

There are two key traits that the parallel Rust programmer must understand—Send and Sync. The Send trait is applied to types that can be transferred across thread boundaries. That is, any type T: Send is safe to move from one thread to another. Rc<T>: !Send means that it is explicitly marked as being unsafe to move between threads. Why? Consider if it were marked Send; what would happen? We know from the previous chapter that Rc<T> is a boxed T with two counters in place for weak and strong references to T. These counters are the trick. Suppose we spread an Rc<T> across two threads—call them A and B—each of which created references, dropped them, and the like. What would happen if both A and B dropped the last reference to ...

Get Hands-On Concurrency with Rust now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.