4 8 Многопоточный код

Удобные квалификаторы многопоточности

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()
{
}