11
votes

Quels composants de l'état du programme sont partagés sur des threads dans un processus multi-threadé?

Lequel des éléments suivants de l'état du programme est partagé sur des threads dans un processus multi-threadé?

  • Enregistrer les valeurs
  • Mémoire de tas
  • Variables globales
  • Mémoire de pile

    Ma suggestion; Seules les variables globales, les variables globales sont allouées sur le tas? Donc, la mémoire de tas et les variables globales. Est-ce correct?


1 commentaires

Les variables globales sont dans le segment de données statique du programme, pas dans le tas (si nous parlons des langages compilés classiques comme c)


4 Réponses :


18
votes

Mémoire de tas toujours.

Les variables globales dépendent de la plate-forme, elles sont généralement partagées.

Stack est spécifique au fil, ainsi que des registres.


1 commentaires

@DATA_JEPP Oui, partagé sous Linux. Si vous souhaitez avoir des variables "globales" de thread-local, vous pouvez attribuer le stockage de thread-local à l'aide des fonctions Pthread_ *.



1
votes

Cela dépend de la langue et de la mise en œuvre du fil. Par exemple, je ne pense pas que même c vous permet d'accéder directement aux registres de la CPU, il est donc préférable de savoir si, par exemple, Pthread partage des registres (qui, pour le compte rendu, je suis assez certain que cela ne signifie pas). Également en C, les variables globales sont pas en fait allouées sur le tas, bien qu'ils puissent être dans d'autres langues.

La pile est plus compliquée. Dans C / Pthreads, chaque fil a sa propre pile, mais dans d'autres langues et des modèles de filetage, la situation pourrait être beaucoup plus compliquée simplement parce que les modèles de pile sous-jacents peuvent ne pas être aussi simples.


1 commentaires

Vous pouvez utiliser l'assemblage en ligne dans C pour accéder à des registres, mais il commence à perdre son nom de «assemblage portable».



1
votes

pile: non

registres: non

tas: oui (si vous devez choisir Y ou N, les réponses vraies sont-elles dépend)

Globals: Oui


0 commentaires

1
votes

Les valeurs globales et la mémoire de tas sont partagées dans un processus multithreadé. Les valeurs d'enregistrement et la mémoire de pile sont privées à chaque fil.


0 commentaires