Nombre maximal de threads par processus – échec de sysconf (_SC_THREAD_THREADS_MAX)

J’essaie de trouver le nombre maximal de threads par processus sur une machine UNIX et ai écrit le code ci-dessous pour utiliser sysconf:

#include  #include  #include  #include  #include  int main() { errno = 0; long maxThreads = sysconf(_SC_THREAD_THREADS_MAX); if (maxThreads == -1 && errno == 0) { printf("the variable corresponding to _SC_THREAD_THREADS_MAX " "is associated with functionality that is not " "supported by the system\n"); exit(1); } if (maxThreads == -1) { printf("errno: %d\n", errno); exit(1); } printf ("max num threads per process: %ld\n", maxThreads); exit(0); } 

Malheureusement, la fonction sysconf () renvoie -1 sans modifier le code d’erreur! Est-ce que quelqu’un sait comment résoudre ce problème et finalement quel est le nombre maximal de Pthreads par processus? Merci

PS Je l’ai essayé sous Solaris et Linux et j’ai obtenu le même résultat. Cependant, HPUX est revenu 8000!

Selon mon manuel pour sysconf sur mon Mac OSX 10.7.X:

Si l’appel à sysconf () n’aboutit pas, -1 est renvoyé et errno contient le code d’erreur. Sinon, si la variable est associée à une fonctionnalité non prise en charge, la valeur renvoyée est -1 et errno n’est pas modifiée. Sinon, la valeur de la variable actuelle est renvoyée.

Sous Linux, c’est différent:

Si name n’est pas valide, -1 est renvoyé et errno contient le code d’erreur EINVAL. Sinon, la valeur renvoyée est la valeur de la ressource système et errno contient le code d’erreur. Dans le cas des options, une valeur positive est renvoyée si une option interrogée est disponible et -1 dans le cas contraire. Dans le cas des limites, -1 signifie qu’il n’y a pas de limite définie.

Il semble donc que _SC_THREAD_THREADS_MAX ne soit pas une variable sysconfig valide sur cette architecture ou peut-être qu’il n’y a pas de limite. Ou peut-être existe-t-il une autre définition de -1 sur d’autres architectures. Vous devrez consulter le manuel de chaque architecture que vous essayez de mettre au travail.

Si _SC_THREAD_THREADS_MAX n’est pas valide, vous pouvez essayer des processus plutôt que des threads. Peut-être y at-il un paramètre de processus max qui signifie également un nombre maximal de threads.

S’il n’y a pas de limite de threads, la fonction renvoie -1.

La norme POSIX fait référence à PTHREAD_THREAD_MAX en tant que limite imposée par le système sur le nombre total de threads dans un processus. Sur RHEL4 et SLES9, cette macro est en réalité définie pour LinuxThreads. À partir de SLES 10, LinuxThreads n’est plus pris en charge. La nouvelle implémentation de pthread sous Linux, NPTL (Native POSIX), ne limite pas le nombre de threads pouvant être créés, à l’exception de la disponibilité réelle des ressources. Par conséquent, la macro PTHREAD_THREAD_MAX n’est plus définie dans les fichiers d’en-tête du système SLES 10.

info + info