Piszę bibliotekę C, która potrzebuje fork() podczas inicjalizacji. Dlatego chcę potwierdzić(), że kod aplikacji (który jest poza moją kontrolą) wywołuje mój kod inicjujący bibliotekę z jednego kontekstu wątków (aby uniknąć dobrze znanego "threads and fork don't mix" problemu). Po zainicjowaniu mojej biblioteki jest ona bezpieczna dla wątków (i oczekuje się, że kod poziomu aplikacji może tworzyć wątki). Zajmuję się tylko obsługą pthreadów.pthreads: jak uruchomić kod działa w jednym kontekście gwintowanym
Wydaje się niemożliwe, aby policzyć liczbę wątków w bieżącej przestrzeni procesu za pomocą pthreads. Rzeczywiście, nawet googletest implementuje tylko GetThreadCount() w systemie Mac OS i QNX.
Biorąc pod uwagę, że nie mogę policzyć nici, czy jest możliwe, że mogę zamiast tego podać jeden wątek?
Wyjaśnienie: Jeśli to możliwe, chciałbym uniknąć używania "/ proc" (nieprzenośny), dodatkowej zależności bibliotek (jak libproc) i stylu LD_PRELOAD pthread_create wrapperów.
Klasyfikacja nr 2: W moim przypadku użycie wielu procesów jest konieczne, ponieważ pracownicy w mojej bibliotece mają stosunkowo dużą wagę (za pomocą pakietu internetowego) i mogą ulec awarii. Jednak chcę, aby oryginalny proces przetrwał awarie pracowników.
Wiem jej nie przenośny, ale jej początek: W systemie Linux istnieje [/ proc/self/stat] (http: //www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html). – ArjunShankar
Co powiesz na "if (pthread_self()! = NULL) ..."? Niestety, to nie jest przydatne, jeśli chcesz sprawdzić, czy nie ma INNYCH wątków innych niż pierwszy, oczywiście. Przepraszam. Nadal myślę ... –
W sprawie dalszego dochodzenia, nie jestem pewien, czy istnieje prosty sposób rozwiązania tego problemu. Być może po prostu "udokumentuj to wyraźnie i pozwól użytkownikowi cierpieć, jeśli nie czytasz dokumentów?" –