Listen

Description

第37章へようこそ。

今日のテーマは、SendとSyncです。

前章で、スレッドに値を渡すときは所有権ごと渡すことを見ました。

moveが、外側の値の所有権をクロージャへ移し、新しいスレッドへ持ち込む。

ただし、すべての値がスレッド境界を越えてよいわけではありません。

ある値をスレッドに渡すと、データ競合という危険が生じる場合がある。

データ競合は、複数の流れが同じ値に同時に触れ、少なくとも一方が書き換えるときに起こる、結果の定まらない状態のことです。

Rustは、この危険を実行してから気づくのではなく、コンパイルの時点で防ぐ。

そのために、どの型がスレッド境界を越えてよいかを、型のうえで区別する。

この区別を担うのが、SendとSyncという2つのトレイトです。

今日扱うのは、SendとSyncがそれぞれ何を表すのか、これらがどう自動的に決まるのか、

そして、なぜRcがこの境界を越えられないのか、という核心です。