Aşağıdaki kodu vardır: adı senkronize olmayan, işlem, giriş parametresini gösterir ve tamamlandığında olarak, Bu durumda,C# gibi Swift bir nesne kilitleme herhangi bir şekilde var
func foo() {
var sum = 0
var pendingElements = 10
for i in 0 ..< 10 {
proccessElementAsync(i) { value in
sum += value
pendingElements--
if pendingElements == 0 {
println(sum)
}
}
}
}
fonksiyonu proccessElementAsync
ilgili tamamlama işleyicisini çağırır.
Bu yaklaşımın vermiş olduğu rahatsızlık, pendingElements
değişkeninin birden çok iş parçacığı aracılığıyla erişilebilmesi nedeniyle if pendingElements == 0
ifadesinin hiçbir zaman doğru değere sahip olmamasıdır. C# '
Object lockObject = new Object();
...
lock (lockObject) {
pendingElements--;
if (pendingElements == 0) {
Console.WriteLine(sum);
}
}
ve bu değişken aynı anda sadece bir iş parçacığı için erişilebilir olmasını sağlar. Swift'de aynı davranışı elde etmenin bir yolu var mı?
https://www.mikeash.com/pyblog/friday-qa-2015-02-06-locks-thread-safety-and-swift.html –
Yan not: C# 'kilit (someIntValue) 'Neyi başarmaya çalıştığınıza uzaktan yakın bir şey yapmaz ... C# 'da lütfen sadece kilitleme için özel nesneler oluşturma varsayılan kılavuzunu takip etmeyi düşünün ... –
C# ile biz' Interlocked.Decrement ' – Bas