Est-ce que l'appel select () / pselect () en fil secondaire cause de thread principal au bloc?

StackOverflow https://stackoverflow.com/questions/4504377

  •  12-10-2019
  •  | 
  •  

Question

J'ai une demande que je travaille sur qui nécessite deux threads secondaires, et chacun sera responsable d'un certain nombre de descripteurs de fichiers (au moins 1, plus de 10). Les descripteurs de fichiers ne sont pas partagés entre les fils, donc je n'ai pas à vous soucier d'un thread secondaire bloquant l'autre quand selecting pour voir ce qui est prêt à lecture / écriture. Ce que je veux être sûr que ni des fils secondaires entraîne le thread principal pour arrêter l'exécution pendant que l'appel select / pselect est en cours d'exécution.

Je suppose que ce n'est pas un problème - on imaginer que de telles choses se faire, disons, un serveur web - mais je ne pouvais pas trouver quelque chose qui spécifiquement dit « oui, vous pouvez le faire » quand je googlé. Ai-je raison dans mon hypothèse que cela ne posera aucun problème?

Pour plus de précisions, ce que je ressemble à quelque chose comme:

  • fil principal d'exécution (boucle de select() la gestion des messages de commande entrantes et les réponses sortantes)

  • filetage secondaire n ° 1 (boucle de select() fourniture d'un service)

  • filetage secondaire # (boucle de select() fournir un autre service) 2

Comme je l'ai mentionné précédemment, aucun des descripteurs de fichiers sont partagés entre les fils -. Ils sont créés, utilisés et détruits dans un thread individuel, avec les autres fils ignorants de leur existence

Était-ce utile?

La solution

Non, vous n'avez pas à vous soucier de les bloquer le thread principal. Je l'ai utilisé de choix dans plusieurs threads dans divers projets. Tant qu'ils ont fdsets distincts alors vous allez bien et chacun peut être utilisé comme une boucle d'événement indépendant.

Autres conseils

Select est pas censé bloquer tout le processus? Avez-vous essayé de régler le mode sans blocage sur la prise?

En outre, voir select_tut page de manuel d'aide.

Voici une section pertinente du select_tut manpage:

So what is the point of select()? Can't I just read and write to my descriptors whenever I want? The point of select() is that it watches multiple descriptors at the same time and properly puts the process to sleep if there is no activity.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top