Une Dll, plusieurs threads - Comment gérer ça?

Slt à tous, j’ai développé une Dll qui me permet d’accéder à un serveur de type OPC.

Le truc, c’est que j’ai plusieurs processus qui accèdent aux données de ce serveur en parallèle (le processus A accède aux données alpha, le processus B aux données béta, le processus C aux données alpha et gamma…)

Donc, j’aimerais savoir plusieurs petit trucs:

  1. par défaut, comment est géré l’accès de plusieurs process qui fonctionnent en // à une même fonction d’une même Dll?

  2. (induit du 1 mais purement hypotétique à cet instant) comment rendre l’accès à cette fonction de cette Dll possible à plusieurs threads, et donc sans les bloquer (c’est à dire que si A utilise la fonction, je ne veux pas que B attende que A ait terminé)

Merci à ceux qui saurons m’apporter des réponses ou des liens vers ce sujet (j’ai cherché, mais Google n’est pas mon ami sur le coup là)

Je ne sais pas ce qu’il en est pour les dll, mais normalement (sous linux, avec les Shared Objects, mais c’est pareil). Ta mémoire est paginée, et ta dll tient sur ces pages : quand un de tes programmes modifie les données de la dll (par exemple, ta dll a des variables statiques) elle est copiée “copy on write” au lieu d’être simplement partagé.

Donc pour les processus, pas trop de soucis normalement.

Pour les threads, c’est autre chose puisque la dll est partagée entre eux, sans copie… et à moins qu’elle utilise des variables de thread (je crois que tu peux avec les threads, faire des variables associés à un thread, évitant les écritures concurrentes) ta dll n’est pas thread safe si elle des variables globales ou statiques.

Pour contrer ça? Ben thread => mutex => lock :slight_smile: genre tes protos deviennent ça :

static pthread_mutex m = … ; (faut voir le man pthread_mutex, et pareil pour win)

int x(...)
{
   ... déclaration des types ...
   pthread_mutex_lock(m);

   ... 

   if ( erreur )
   {
      pthread_mutex_unlock(m);
      return;
   }
   ...
   pthread_mutex_unlock(m);
}

Là, ta dll devrait être thread-safe à condition de trouver les équivalents win32

OK, merci bcp.

Tu connaitrais un site qui traite de ce sujet, parce que j’ai beau chercher, je trouve pas mon bonheur?

Merci

Malheureusement non :x

Pas mieux que Sans-nom si ce n’est que les pthread sous billou c’est via les CriticalSection (Enter/Leave) :slight_smile:

+1 pour les pthreads (posix thread) c la meilleurs archi multi threads !!!

ps existe sous windows aussi
j’ai testé avec devcpp c tres cool … par contre pas trouvé l’implemantation C++ de l api

OK, merci à tous pour vos conseils.

Je me sens un peu comme une mer*e là, parce que je dois bien avouer que je connais que dalle au multi threading sous Windows.

Si quelqu’un a quelques lien, ça m’arrangerais bien, parce que c’est un peu l’amazonie de ce coin là!

Pour ce qui est threads, je sais pas quelle API tu vas utiliser, mais si c’est pthread, c’est portable donc tu devrais trouver de la doc facilement avec google. -> http://sources.redhat.com/pthreads-win32/

Par contre, les threads natives win32, je dirais msdn à tout hasard (même si c’est pas biffable comme site).

Merci beaucoup, je vais jeter un coup d’oeil à tout ça, ça semble trés intéressant!