2010-06-27 4 views
2

Quelles sont les instructions pour écrire du code UNIX thread-safe en C et C++?Conseils pour écrire du code UNIX thread-safe?

Je ne connais que quelques-uns:

  • Ne pas utiliser globals
  • Ne pas utiliser le stockage local statique

Ce que les autres sont là?

+0

Veuillez cocher les questions du sondage 'wiki communautaire'. – danben

+0

danben, fait. w – bodacydo

Répondre

6

La chose simple à faire est de lire un peu. La liste suivante contient des éléments à examiner et à rechercher.

  1. Passer du temps la lecture du Open Group Base Specification en particulier la section General Information et la subsection on threads. C'est l'information de base pour le multithreading sous la plupart des systèmes UN * X-semblables.
  2. Apprenez les difference between a mutex and a semaphore
  3. Rendez-vous compte que tout ce qui est partagé MUST être protégé. Cela s'applique aux variables globales, aux variables static et à toute mémoire allouée dynamiquement partagée. Remplacez les indicateurs d'état globaux par condition variables. Ceux-ci sont mis en œuvre en utilisant pthread_cond_init et les fonctions connexes.

Une fois que vous comprenez les bases, en apprendre davantage sur les problèmes communs afin que vous puissiez les identifier quand ils se produisent:

+0

Wow, je n'avais pratiquement pas entendu parler de tout ce que vous avez énuméré ici! Commencer à lire. – bodacydo

+0

Il y a beaucoup d'informations là-bas. Si vous voulez plus de livres, donnez les notes sur https://computing.llnl.gov/tutorials/pthreads/ ou lisez "UNIX Systems Programming" (http://www.amazon.com/UNIX-Systems-Programming -Communication-Concurrency/dp/0130424110 /) –

2

Il revient vraiment à l'état partagé, globals et static local sont des exemples d'état partagé. Si vous ne partagez pas l'état, vous n'aurez pas de problème. D'autres exemples d'état partagé incluent plusieurs threads qui écrivent dans un fichier ou une socket. Toute ressource partagée devra être gérée correctement - cela peut signifier la création d'un mutex protégé, l'ouverture d'un autre fichier ou la sérialisation intelligente des requêtes.

Si deux threads sont en lecture et en écriture à partir de la même structure, vous devez gérer ce cas.

1

Méfiez-vous des sem_t fonctions, ils peuvent revenir inachevés sur les interruptions, IO, etc. SIGCHLD Si vous avez besoin, assurez-vous de AllWays capture ce cas.

pthread_mut_t et pthread_cond_t les fonctions sont sans danger par rapport à EINTR.

0

Un bon livre ouvert sur la concurrence en général peut être trouvé ici: Little Book of Semaphores

Il présente divers problèmes qui sont résolus étape par étape et incluent des solutions aux problèmes courants de concurrence tels que la famine, les conditions de course, etc. Il n'est pas spécifique à la langue mais contient de courts chapitres sur l'implémentation des solutions en C avec Pthread-Library ou Python.