GNU/Linux >> Znalost Linux >  >> Linux

ID vlákna vs. rukojeť vlákna

ID je jedinečný číselný identifikátor vlákna běžícího v systému. Rukojeť vlákna, stejně jako jakýkoli ovladač objektu jádra, lze považovat za speciální typ referenčního počítaného ukazatele na objekt jádra.

Takže v prostoru jádra je objekt typu THREAD s ID =12345

A protože chcete s vláknem něco udělat, máte ve svém adresním prostoru ukazatel nazvaný threadID s hodnotou 44.

Vezměte prosím na vědomí, že různé handle stejného objektu jádra mají různé hodnoty (dva ukazatele na jeden objekt) a že objekty jádra mohou mít úchyty ve více než jednom procesu.


Linuxová knihovna pthread nemá, pokud vím, koncept ovladače vlákna. pthread_create a další funkce pthreads vracejí ID vlákna.

V systému Windows se popisovač vlákna liší od ID vlákna, stejně jako se popisovač souboru liší od názvu souboru.

Rukojeť vlákna je token, který vám umožňuje s vláknem něco dělat (obvykle na to čekat nebo je zabít). Win32 má tyto tokeny pro mnoho objektů a obecně je nazývá HANDLE.

Token je v podstatě ukazatel na běžící (nebo zastavené) vlákno a je s ním spojena sada schopností, například můžete mít rukojeť, která vám umožní čekat na vlákno, ale ne jej zabíjet. Stejným způsobem můžeme mít popisovač souboru, který je pouze pro čtení.

Tato úroveň nepřímosti může nebo nemusí být užitečná, ale je to způsob, jakým to dělá Win32, a je v zásadě konzistentní s tím, jak zachází s některými jinými typy objektů.


ID vláken jsou progresivní (tj. jedno po druhém), kterými můžete procházet. Úchyty vláken, jako většina úchytů ve Windows, jsou ve skutečnosti ukazatele. Můžete například nastavit bity vlastností vlákna pomocí úchytu vlákna – ale ne ID vlákna .


Linux
  1. Jak zacházet s přepínači ve skriptu Shell?

  2. Jak ukončit vlákno v programu C ( příklad pthread_exit )

  3. Jak vytisknout pthread_t

  1. funkce strtok bezpečnost vlákna

  2. Je bezpečné forkovat z vlákna?

  3. ID vlákna Pythonu, jak je uvedeno nahoře

  1. Které vlákno zpracovává signál?

  2. popisovač procesu v lldbinit

  3. chyba směrování linuxu?