Ho bisogno di impostare un flag per un altro thread per uscire. Quell’altro thread controlla di volta in volta il flag di uscita. Devo usare atomico per la bandiera o solo un semplice bool è sufficiente e perché (con un esempio di cosa esattamente potrebbe andare storto se uso il bool semplice)? #include bool exit […]
Ogni sistema operativo moderno fornisce oggi alcune operazioni atomiche: Windows ha l’API Interlocked* FreeBSD ha Solaris ha Mac OS X ha Qualcosa del genere per Linux? Ho bisogno che funzioni sulla maggior parte delle piattaforms supportate da Linux, tra cui: x86, x86_64 e arm . Ho bisogno che funzioni almeno su GCC e Intel Compiler. […]
I seguenti dati di implementazione di Singleton sono gratuiti? static std::atomic m_instance; … static Tp & instance() { if (!m_instance.load(std::memory_order_relaxed)) { std::lock_guard lock(m_mutex); if (!m_instance.load(std::memory_order_acquire)) { Tp * i = new Tp; m_instance.store(i, std::memory_order_release); } } return * m_instance.load(std::memory_order_relaxed); } Lo std::memory_model_acquire di caricamento è superfluo? È ansible rilassare ulteriormente le operazioni di caricamento e […]
Sfondo: Gestisco diverse app Winform e librerie di classi che potrebbero o già trarranno vantaggio dalla memorizzazione nella cache. Sono anche a conoscenza del Caching Application Block e dello spazio dei nomi System.Web.Caching (che, da quello che ho raccolto, è perfettamente OK da usare al di fuori di ASP.NET). Ho scoperto che, sebbene entrambe le […]
Supponiamo di avere due thread, uno sta leggendo un bool in un ciclo e un altro lo può triggersre in determinati momentjs. Personalmente penso che questo dovrebbe essere atomico perché sizeof(bool) in C ++ è di 1 byte e non si leggono / scrivono i byte parzialmente ma voglio essere sicuro al 100%. Quindi sì […]
Da quello che ho letto da Herb Sutter e da altri, si potrebbe pensare che la programmazione volatile e concorrente fosse un concetto completamente ortogonale, almeno per quanto riguarda C / C ++. Tuttavia, nell’implementazione GCC tutte le funzioni membro di std::atomic hanno il qualificatore volatile . Lo stesso è vero nell’implementazione di std::atomic Anthony […]
Ho letto un articolo su Lockless Programming in MSDN. Dice : Su tutti i processori moderni, si può presumere che le letture e le scritture di tipi nativi allineati in modo naturale siano atomici . Finché il bus di memoria è largo almeno quanto il tipo letto o scritto, la CPU legge e scrive questi […]
Sto caricando dynamicmente il codice (funzioni) da un server ed eseguendolo come codice javascript, quindi memorizzandolo in un array ed eseguendolo. Tutti questi snippet di codice devono essere eseguiti esattamente una volta. Lo psuedocode segue come tale function fetch(foo){ if (foo in fooArray){ //Do Nothing else{ //Fetch foo via Ajax and execute foo() } } […]
Cosa (se c‘è) è l’equivalente in C # dell’istruzione x86 asm xchg ? Con questo comando, che è un vero scambio (diversamente da Interlocked.Exchange ), potrei semplicemente scambiare atomicamente due inte, che è quello che sto provando a fare davvero. Aggiornare: Codice di esempio basato sul mio suggerimento. Le variabili “_V” con suffisso sono decorate […]
Nel libro Effective Java, afferma: La specifica del linguaggio garantisce che la lettura o la scrittura di una variabile sia atomica a meno che la variabile non sia di tipo long o double [JLS, 17.4.7]. Cosa significa “atomico” nel contesto della programmazione Java o della programmazione in generale?