Articles of concorrenza

Come implementare ConcurrentHashSet in .Net

Sto cercando di implementare un ConcurrentHashSet nello spirito di ConcurrentDictionary, l’approccio adottato è quello di utilizzare un supporto interno ConcurrentDictionary e scrivere piccoli metodi di delega, questo è quanto ho ottenuto, ma i metodi teorici stabiliti sono su cui sono bloccato, esp. Non sono sicuro di poter utilizzare un foreach e comunque non violare la […]

Possiamo avere condizioni di gara in un programma a thread singolo?

Potete trovare qui una spiegazione molto buona su che cosa è una condizione di gara. Ho visto di recente molte persone fare affermazioni confuse sulle condizioni della competizione e le discussioni. Ho imparato che le condizioni di gara potrebbero verificarsi solo tra i thread. Ma ho visto codice simile a condizioni di gara, in eventi […]

Come dichiarare gli elementi dell’array volatile in Java?

C’è un modo per dichiarare gli elementi dell’array volatile in Java? ie volatile int[] a = new int[10]; dichiara il riferimento dell’array volatile , ma gli elementi dell’array (es. a[1] ) non sono ancora volatili. Quindi sto cercando qualcosa di simile volatile int[] a = new volatile int[10]; ma non funziona in questo modo. È […]

Come faccio a incrementare atomicamente una variabile in Swift?

Voglio essere in grado di incrementare un contatore atomicamente e non riesco a trovare alcun riferimento su come farlo. Aggiunta di ulteriori informazioni in base ai commenti: Stai usando GCD? No. Non sto usando GDC. Dovendo usare un sistema di coda per incrementare un numero sembra eccessivo. Sei consapevole della sicurezza del thread di base? […]

std :: this_thread :: sleep_for () e GCC

Quando provo a compilare questo semplice programma: #include void f() { std::this_thread::sleep_for(std::chrono::seconds(3)); } int main() { std::thread t(f); t.join(); } con gcc versione 4.4.3 su Ubuntu 10.04 (32 bit): $ g++ -std=c++0x -pthread a.cpp -oa Ottengo: error: ‘sleep_for’ is not a member of ‘std::this_thread’ Ho guardato nell’intestazione ‘thread’. sleep_for () è protetto con _GLIBCXX_USE_NANOSLEEP #ifdef […]

Sono assegnazioni a 64 bit in atomico Java su una macchina a 32 bit?

Se ho un codice come questo – long x; x = 0xFFFFFFFFL; Se eseguo questo codice su una macchina a 32 bit, è garantito che sia atomico o è ansible che una lettura di thread diversa x, possa ottenere un valore incompleto / inutile?

Golang: struttura anonima e struttura vuota

http://play.golang.org/p/vhaKi5uVmm package main import “fmt” var battle = make(chan string) func warrior(name string, done chan struct{}) { select { case opponent := <-battle: fmt.Printf("%s beat %s\n", name, opponent) case battle <- name: // I lost 🙁 } done <- struct{}{} } func main() { done := make(chan struct{}) langs := []string{"Go", "C", "C++", "Java", "Perl", […]

Test simultanei di JUnit

Ho una grande suite di test JUnit, dove mi piacerebbe eseguire tutti i test contemporaneamente per due motivi: Sfrutta più core per eseguire l’intera suite di test più velocemente Speriamo di rilevare alcuni errori dovuti a oggetti globali non thread-safe Riconosco che questo mi costringerà a refactoring del codice per renderlo thread-safe, ma ritengo che […]

Rilevazione deadlock programmatico in java

Come posso rilevare a livello di codice che si è verificato un deadlock in un programma Java?

Come aspettare diversi Futures

Supponiamo che io abbia diversi futuri e che debba aspettare fino a quando uno di essi fallisce o tutti hanno successo. Ad esempio: lascia che ci siano 3 futures: f1 , f2 , f3 . Se f1 esito positivo e f2 fallisce, non aspetto f3 (e non restituisco il fallimento al client). Se f2 fallisce […]