Mam aplikacje wielowatkowa. Potrzebna jest mi funkcja, ktora zwroci mi unikalny numer (identyfikator) watku, ktory ja wywolal. Identyfikator ten powinien byc >= 0 i mozliwie maly, tzn. ze jak mam 4 watki, to zeby mi nie zwracalo 65000. Dla tego samego watku nie musi byc zawsze ten sam identyfikator, jednak:
- nie moze byc ten sam identyfikator dla 2 roznych watkow,
- musi byc mozliwosc dowiedzenia sie zawczasu, np. przy tworzeniu watku, jakie beda jego identyfikatory (jesli mozliwe wiecej).
Wiem, ze cos takiego mozna zrealizowac za pomoca funkcji API syst. operacyjnego np. pthread_xxxx, ale to rozwiazanie ma jedna okropna wade: jest strasznie wolne. Potrzebne mi cos, co najlepiej da sie zrobic jako inline, czyli maks. kilkanascie opcodow. Mozliwe jest oczywiscie umieszczenie dowolnej ilosci kodu przy tworzeniu watkow / starcie aplikacji, ale pozniej juz watki musza byc identyfikowane bardzo szybko.
Drobna sugestia: mozna wykorzystac fakt, ze kazdy watek ma inny poczatek stosu. Z drugiej strony jednak wtedy strasznie cezko o przenosnosc - kazdy system, inaczej przydziela te adresy... :( Gorzej, nawet podwersje jadra Linuksa maja tu istotne znaczenie.
Moze macie jakies fajne pomysly, zarowno na "ujarzmienie stosu" jak i moze jakies zupelnie inne? Rozw. moze byc w asmie, ale wolalbym w C.