Ho il codice seguente:C'è un modo di bloccare un oggetto in Swift come in C#
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)
}
}
}
}
In questo caso la funzione proccessElementAsync
, come indica il nome, processo suo parametro di ingresso asincrono e quando finisce chiama il corrispondente gestore di completamento.
L'inconveniente di questo approccio è che poiché la variabile pendingElements
è accessibile tramite più thread, è possibile che l'istruzione if pendingElements == 0
non abbia mai un valore true.
In C# siamo in grado di fare qualcosa di simile:
Object lockObject = new Object();
...
lock (lockObject) {
pendingElements--;
if (pendingElements == 0) {
Console.WriteLine(sum);
}
}
e questo assicura che questa variabile sarà accessibile solo per un thread allo stesso tempo. C'è un modo per ottenere lo stesso comportamento in Swift?
https://www.mikeash.com/pyblog/friday-qa-2015-02-06-locks-thread-safety-and-swift.html –
Nota a margine: in C# 'blocco (someIntValue) 'non fa nulla lontanamente vicino a quello che stai cercando di ottenere ... In C# ti preghiamo di considerare le seguenti linee guida di default per creare oggetti speciali solo per bloccare ... –
In C# saremo in grado di fare' Interlocked.Decrement' – Bas