Je continue d'entendre parler de programmation simultanée partout. Pouvez-vous nous expliquer ce que c'est et comment les nouvelles normes c ++ facilitent la même chose?
La concurrence consiste à ce que votre code fasse plusieurs choses en même temps. Cela se fait généralement avec des "threads" explicites, mais il existe d'autres possibilités. Par exemple, si vous utilisez des directives OpenMP dans votre code, un compilateur qui prend en charge OpenMP générera automatiquement des threads pour vous.
Thread est l'abréviation de "thread of execution". Dans un programme C++ monothread, l'exécution commence à main (), puis se déroule de manière séquentielle. Dans un programme multithread, le premier thread démarre à main, mais des threads supplémentaires peuvent être démarrés par l'application qui démarrent à une fonction spécifiée par l'utilisateur. Ceux-ci s'exécutent alors simultanément ou en parallèle avec le thread d'origine.
En C++ 0x, les threads sont démarrés à l'aide du std::thread
classe:
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
La nouvelle norme C++ 0x prend également en charge:
std::atomic<>
modèle de classe,std::mutex
, std::recursive_mutex
, etc.)std::lock_guard<>
, std::unique_lock<>
)std::lock
et std::try_lock
fonctions pour gérer l'acquisition de plusieurs verrous en même temps sans risque de blocagestd::condition_variable
, std::condition_variable_any
)thread_local
mot clé pour déclarer les données locales du threadJ'ai donné un aperçu plus détaillé de la nouvelle bibliothèque de threads C++ 0x dans mon article sur devx.com: Multithreading plus simple en C++ 0x
J'écris sur le multithreading et la concurrence en C++ sur mon blog . J'écris également un livre sur le sujet: C++ Concurrency in Action .
Lorsque vous dites "comment les nouvelles normes c ++ facilitent" la programmation simultanée, je suppose que vous parlez de la norme C++ 09 qui sera bientôt publiée (?).
La nouvelle norme, sous sa forme actuelle, prend en charge les éléments suivants qui facilitent la programmation simultanée:
C++ CSP2 - Accès simultané facile pour C++
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
Le CSP est basé sur un paradigme concurrent approprié par opposition aux threads et aux verrous et à toutes sortes d'autres choses qui sont abordées après coup.
(Voir Occam-Pi pour un langage de programmation simultané (également basé sur CSP))
Peut-être que cette vidéo pourrait vous éclairer :-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
La concurrence a plusieurs threads d'exécution pour un processus donné. À ce jour, C++ ne le prend pas directement en charge. Cependant, il existe plusieurs bibliothèques qui lieront une fonction donnée à un nouveau thread d'exécution. Le standard Unix est la bibliothèque pthreads.
Ma prise légèrement différente, spécifique aux directions futures des paradigmes de programmation:
La concurrence consiste à écrire votre programme de telle sorte qu'il puisse faire plusieurs choses à la fois si le matériel le prend en charge. Actuellement, la plupart des langages ont des mécanismes assez lourds et compliqués pour permettre au programmeur de le spécifier (par exemple: threads avec synchronisation manuelle, directives de pré-processeur OpenMP, etc.).
À mesure que le matériel s'améliore, il s'améliorera horizontalement (plus de cœurs) plutôt que verticalement (un seul cœur plus rapide). Cela signifie que les applications devront avoir une "concurrence latente" pour évoluer avec du matériel "plus rapide". Les langues tentent actuellement d'évoluer pour mieux soutenir cela, pour être dans la position du meilleur langage pour un développement futur.
C++ 0x ajoute un support plus intégré pour les "anciennes" méthodes de programmation de la concurrence. Divers éditeurs de compilateurs ajoutent de "nouvelles" méthodes qui font abstraction du modèle de thread et permettent des décisions d'exécution sur le nombre de threads, etc. (en fonction du matériel de la machine); pour Microsoft en particulier, voir F #, runtime d'accès concurrentiel, extensions parallèles, etc.
J'espère que cela pourra aider.
C'est le meilleur article pour comprendre la programmation simultanée: Programmation simultanée
Vous obtiendrez l'image complète de la programmation simultanée et du C++ après l'avoir lu.
En résumé, nous pouvons dire que la programmation simultanée consiste à faire du multitâche. Lorsqu'un programme est bloqué, il peut faire autre chose. En règle générale, nous sommes bloqués en attendant les connexions réseau et en traitant les E/S. Nous pouvons faciliter la programmation simultanée en utilisant fork()
et les bibliothèques de threads.