2009-08-19 20 views
5

Pracuję nad podsystemem POSIX mojego projektu systemu operacyjnego i doszedłem do punktu, w którym chciałbym pracować nad obsługą pthreads. Jednak nie jestem pewien, w jakim stopniu powinienem je wdrożyć.Realistycznie, jakie funkcje pthreads są zazwyczaj używane?

Jaka jest najczęściej używana funkcja pthreads? Czy jest coś, co mógłbym bezpiecznie "po prostu zgasić" na razie i zaimplementować go, kiedy podłączymy aplikację, która tego wymaga? Moje dotychczasowe badania wskazują na podstawowe operacje na wątkach (tworzenie, dołączanie, itp.) - to całkiem oczywiste - i obsługa muteksów. Realistycznie rzecz biorąc, czy aplikacje używają dużo więcej niż to?

Chyba po prostu próbuję dowiedzieć się, jak niewiele mogę uciec, a jednocześnie mam działającą implementację.

Odpowiedz

7

Chciałbym zaproponować szkielety pthread pokrywę realizacji następujące funkcje (z "pthread_" prefiksy usunięte):

  • podstawowe operacje gwint
    create, exit, join, detach, self, equal, i "attr" obsługa złączności/odłączalności
  • integracja procesu
    atfork, kill i sigmask
  • synchronizacji prymitywy
    cond i mutex funkcje (domyślne atrybuty tylko - nic szczególnego), ewentualnie pomijając cond_timedwait

Spójrz na wejściu SUSv6 na <pthread.h>, który Łączę w stosunku do SUSv7, ponieważ wersja 6 ma więcej grup opcji wywoływanych w tym nagłówku. Skompilowałem powyższą listę, uderzając w dowolne opcjonalne funkcje, a następnie upuszczając inne zestawy funkcji, które sugeruje moja osobista historia i obserwacja, są nieistotne (np. Dane specyficzne dla wątku) lub zarówno nieistotne, jak i niebezpieczne (np. Anulowanie nici). :)

+0

Dzięki.To jest właśnie ten rodzaj informacji, którego potrzebowałem. –

+0

Skończyło się na tym, próbując dowiedzieć się, od czego zacząć, poznając pthreads: był naprawdę przydatny, pomógł mi wiedzieć, które strony podręcznika przejść na pierwszy! Niezupełnie pasuje do pierwotnego pytania, ale ... dobra odpowiedź również dla * moich * nie związanych celów! Woo: 3 – ELLIOTTCABLE

5

Zdecydowanie trzeba będzie obsługiwać muteksy i zmienne warunkowe, ponieważ bez nich wątki będą bezużyteczne i oba są szeroko stosowane. Przypuszczam, że mógłbyś uciec bez wspomagania semaforów (które nie są częścią pthreads, jak sądzę), ale nie wyobrażam sobie, że bez nich wykonam poważną pracę MT.

Interesujące może być spojrzenie na następny zaproponowany standard C++, który będzie support threading i implementacja funkcji, które wymagają. Jeśli Twój system operacyjny może obsługiwać przyszłe standardowe programy w C++, będzie to miało całkiem dobrą formę.

+0

+1 do odwołania downvote (downvoter: any reason?). Dzięki za odpowiedź, a zwłaszcza za link C++. Planujemy używać C++ do naszego natywnego API, więc niechcący wskazałeś mi odpowiednie informacje dla zupełnie innego obszaru. –

+0

@Neil, można by zaimplementować semafory w terminach 'cond' vars i' mutex'es, aby rozwiązać problem braku obsługi semafora w czasie rzeczywistym. – pilcrow

+0

@pilcrow, ale wydaje się trochę szkoda, że ​​wszyscy ponownie implementują tak powszechnie używaną funkcję. –

Powiązane problemy