10
votes

Concepts de Pthread à Linux

J'ai quelques questions sur Pthreads à Linux:

  1. est-ce le cas que pthread_t est-il un type de données similaire à int et char indiquant que nous définissons un thread?
  2. Si oui, combien de taille faut-il? 2 octets ou 4 octets?
  3. Le compilateur alloue-t-il la mémoire à pthread_t thread1 immédiatement après cette instruction ou attend-il jusqu'à ce que ce soit un pthread_create () appel?
  4. Comment définit-on les attributs de thread et quelle est leur utilisation typique?
  5. peut-on seulement passer plus d'un argument dans le pthread_create () appel? Si oui, comment?

    J'ai beaucoup de choses dans mon esprit comme ça. N'hésitez pas non plus à suggérer de bons sites ou documents à lire.


0 commentaires

4 Réponses :


11
votes

Répondre aux questions une par une, bien que pas nécessairement dans le même ordre:

est pthread_t un type de données similaire à int ou Char , indiquant que nous définissons un thread? Est-ce que le compilateur alloue la mémoire à pthread_t thread1 immédiatement après cette phrase ou attend-il jusqu'à ce qu'il trouve le pthread_create () appel

< Code> pthread_t est un type similaire à int et il est créé lorsque vous le définissez, pas lorsque vous appelez pthread_create . Dans le snippet: xxx

C'est la ligne première qui crée la variable, bien qu'elle ne tienne rien d'utile avant le retour de pthread_create .

Quelle taille a un pthread_t prendre, 2 octets ou 4 octets?

vous ne devriez pas Je me soucie de la quantité d'espace qu'il faut, plus que vous devriez vous soucier de la manière dont l'espace est pris par un fichier structure. Vous devriez simplement utiliser la structure comme prévu. Si vous vraiment veux savoir, alors Tailleof est votre ami.

Toutes les bonnes informations sur la manière de définir les attributs de threads?

Si vous souhaitez utiliser quelque chose d'autre que des attributs par défaut, vous devez d'abord créer une variable d'attributs, puis transmettez-le sur le pthread_create appel.

Pouvons-nous seulement passer un argument dans la fonction pthread_create à la fonction? Ne pouvons-nous pas envoyer 2 ou 3 arguments dans le pthread_create () fonction au thread appelé?

pendant que vous êtes uniquement autorisé à passer un paramètre supplémentaire sur le fil, rien ne vous empêche de faire ce paramètre un paramètre un pointeur à une structure tenant une centaine de choses différentes.


Si vous recherchez des informations sur la façon de savoir comment Utilisez Pthreads, il y a beaucoup de choses à la fin d'une recherche Google, mais je préfère toujours la version de l'arbre mort moi-même:

 Livre de programmation Pthreads, ISBN 13: 978-1-56592-115-3, ISBN 10: 1-56592-115-1


0 commentaires

2
votes

Combien de taille prend-il

pthread_t utilise Tailleof pthread_t octets.

Et nous ne pouvons que passer un argument dans le pthread_create à la fonction pas plus d'un? ne pouvons-nous pas envoyer 2 ou 3 arguments dans la fonction pthread_create () au fil appelé?

Tout ce dont vous avez besoin est un argument. Tout ce que vous obtenez, c'est un argument. C'est un void * afin que vous puissiez transmettre un pointeur sur tout ce que vous voulez. tel qu'une structure contenant plusieurs valeurs.

J'ai beaucoup de choses dans mon esprit, comme cela suggère de bons sites ou documents à lire

Regardez les pages pthead , en ligne ou dans votre coquille de choix ( homme pthread , homme pthread_create , etc.). J'ai commencé à lire un peu diapositives de la conférence de base (voici < Un href = "http://www.cs.brown.edu/courses/cs168/s11/Mandouts/threads2.pdf" rel = "nofollow"> la suite ).


0 commentaires

0
votes

regarder dans pthread.h fichier pour obtenir plus d'informations. Sur mon système, pthread_t est défini comme un non signé long int . Mais je suppose que c'est dépendant de la plate-forme, car il est défini dans bits / pthreadype.h .


1 commentaires

C'est très dépendant de la plate-forme. Sur certains systèmes, il s'agit d'un struct .



1
votes

pthread_t pourrait être tout numéro d'octets. Cela pourrait être un char, un int, un pointeur ou une structure ... mais vous n'avez pas besoin de savoir ni de prendre soin. Si vous avez besoin de la taille à des fins d'allocation, vous utilisez Tailleof (pthread_t) . Le seul type de variable que vous pouvez attribuer à un autre pthread_t .

Le compilateur peut également allouer les ressources associées au fil lorsque vous définissez un pthread_t . Encore une fois, vous n'avez pas besoin de savoir ni de prendre en charge, car vous devez appeler pthread_join (ou pthread_detach ) sur n'importe quel thread que vous créez. Tant que vous suivez les règles, le système s'assurera qu'il ne fuit pas la mémoire (ni aucune autre ressource).

Les attributs sont certes un peu maladroits. Ils sont détenus dans un objet pthread_attr_t , qui pourrait encore être représenté comme un entier, un pointeur ou une struct entière. Vous devez l'initialiser avec pthread_attr_init et le détruire avec pthread_attr_destroy . Entre ces deux, vous utilisez diverses pthread_attr _... pour définir ou effacer les attributs, puis vous pouvez le transmettre dans le cadre d'un ou plusieurs pthread_create appels pour définir les attributs des nouveaux threads.

Différentes implémentations peuvent et traiteront toutes ces choses différemment.

LLNL a un ensemble décent d'informations d'introduction .


0 commentaires