In un mondo di CPU multicore, non solo per il mondo server ma anche per i client, il problema della concorrenza è tutt'altro che banale.
Nel breve futuro, più che velocità, nelle CPU vedremo multicore da 4, poi 8 e poi 16. Sfruttare queste possibilità sarà la chiave di successo per tante applicazioni.
Le "race conditions" rendono estremamente complicato uscire da quello che per tanti è un vero incubo. Programmare in thread concorrenti non è banale e quindi il relatore spiega i concetti fondamentali e le best practices da adottare.
Lo statemente lock (SyncLock di vb.net) insieme alla classe Monitor sono la chiave per sincronizzare l'accesso allo stato di un oggetto. In particolare viene sottolineato quanto sia importante restringere l'insieme di variabili su cui fare il lock. La definizione di un sottostato da lockare può rivelarsi fondamentale sia per le performance, sia per evitare race conditions. Per esempio definire un object ad hoc su cui fare il lock è una buona abitudine. Questo object viene così usato da 'semaforo' per l'accesso concorrente.
Notevole la demo sul calcolo dei numeri primi fatta da remoto su un server in Microsoft con 8 processori come si scorge dalla foto.
Ok direte, ma tutto questo già si sapeva. Ecco allora una carrellata sul futuro della concorrenza. La ricerca che Microsoft sta facendo è nella direzione di fornire un programming model che dia accesso alla programmazione concorrente in modo semplice ed evitando i deadlock. Questa si che è una grossa sfida.
Per esempio Microsoft research sta lavorando intorno ad un "Concurrency and coordination runtime" (di cui si trova materiale anche su Channel 9) e i ragazzi di VC++ sono quelli che stanno offrendo le innovazioni più rilevanti nella prossima generazione del compilatore (da Orcas in poi ovviamente).
Già in VC++2005 è possibile usare OpenMP che permette di parallelizzare i loop, ma con le future versioni arriverà molto di più
Un altro esempio è il "Software Transactional Memory" dove il programmatore dichiara di voler eseguire in modo transazionale una serie di metodi. STM analizza le letture/scritture in memoria e gestisce in modo automatico i ritentativi o l'eventuale abort della transazione. Tutto questo è ancora in fase di ricerca.