2009-12-30 10 views
9

Je développe une bibliothèque partagée (.so) et une DLL. J'ai une variable globale qui est mise à jour dans plusieurs threads. J'ai donc un verrou mutex pour la synchronisation.Variable globale dans une bibliothèque partagée/dll, partagée entre processus

Je ne sais pas si les données globales dans la bibliothèque partagée sont partagées entre processus. Si c'est le cas, j'ai besoin d'utiliser des sémaphores pour la synchronisation. Comme je comprends les variables globales font partie du segment de données, je voulais comprendre comment dll gère les données globales à travers les processus. Toute information w.r.t. format dll et le segment sera utile.

Merci.

+0

Question connexe avec une bonne explication sur le fonctionnement des DLL: http://stackoverflow.com/questions/12229396/unresolved-external-symbol-static-variable-variable-used-by-method -defined-in-h –

Répondre

10

Par défaut, non, les variables globales ne sont pas partagées entre les processus. Toutefois, vous pouvez utiliser un segment de données (data_seg) pour partager des variables globales entre processus.

Vous pouvez trouver plus d'informations sur MSDN dans l'article intitulé "How do I share data in my DLL with an application or with other DLLs?"

+0

@CasperOne: Par défaut, le segment de données de la bibliothèque partagée sera-t-il dupliqué sur chaque processus? – Andy

+0

@Andy: Je ne sais pas ce que vous entendez par "dupliqué" En fait, vous serez en mesure de partager les valeurs entre processus Si vous faites un lien vers la même DLL, si c'est ce que vous demandez, sinon, pourriez-vous élaborer? – casperOne

+0

@CasperOne: Je pense que le segment de code (texte) de dll est partagé à travers le processus. Donc, je voulais savoir ce qui arrive au segment de données de la DLL. Si le contenu du segment de données de dll est copié dans le segment de données de processus. Et comment cela se produit lors du chargement dynamique de DLL. – Andy

0

Absolument NON. Chaque processus a son propre espace de mémoire virtuelle et ne voit pas la mémoire des autres processus. Deux processus peuvent même stocker différentes valeurs à la même adresse, par exemple 1000000, car leurs adresses virtuelles "1000000" sont mappées à différentes cellules de mémoire physiques (par exemple à "2000000" pour le premier processus et à "3000000" pour le second.

+0

Désolé, mais ce n'est tout simplement pas vrai. – casperOne

+0

Essayez de lire quelque chose, par exemple en commençant par ceci: http://msdn.microsoft.com/en-us/library/ms810627.aspx sur la gestion de la mémoire/mappage de la mémoire virtuelle et la gestion de la mémoire dans différents processus sur la plate-forme Win32, avant d'écrire rien ici :) – user224564

+0

Ironique comment vous dites pour "essayer de lire quelque chose", alors qu'en fait j'ai posté un lien vers MSDN montrant exactement ce qui est fait, ainsi que pourquoi votre réponse est fausse. – casperOne

Questions connexes