let mut::atomic::full
{
let mut a : int, let mut b : string;
}
...
В коде переменные a и b будут использоваться одновременно. Мьютекс будет захвачен в месте первого использования одной из этих переменных и освобождён при последней операции с использованием этих переменных.
...
// Захват тут
a = 10;
b = "abc";
print(sum(a, 30));
a += 5;
// освобождение тут
c = 200;
print(c);
Не всегда использование встроенных в язык автоматики для многопоточного программирования достаточно, точнее не всегда будет сгенерирован самый быстрый код. Поэтому в языке есть ручной режим примитивов синхронизации. Вместо указания мьютекса можно указывать переменные которые объявлены с защитой многопоточности. Так понимание того, что защищает алгоритм, более ясное.
lock(a,b); // Захват тут
a = 10;
b = "abc";
a += 5;
unclock(a,b); // освобождение тут
{
lock::scope(a,b); // Захват тут
a = 10;
b = "abc";
a += 5;
// освобождение тут
}
let mut a = 10;
let mut b = 5.0f;
let mut c = "abc";
// Объявление мьютекса
let mut::atomic::write D = [a,b,c];
{
lock::scope(D); // Использование
a = 11;
b += 1.0f;
c.fill("f');
}
fn<conc::threaded> multyThreaded()
{
}