Portál AbcLinuxu, 21. května 2025 20:01
Jinými slovy, je prostě dobré vědět o pthread_cleanup_push
a pthread_cleanup_pop
.
tyhle funkce neznalPozor, s tímhle jsem měl problémy, někde to tu asi bude zahrabaný v dotazech - můžou to být makra a v GCC na linuxu@x86-64 to opravdu makra jsou.
No jasně, že jsou to makra. Právě proto, aby někdo nedělal takové prasečinky jako podmíněné pthread_cleanup_{push,pop}
a hlavně aby to nezapomněl spárovat. Vždy se dá programovat tak, aby ta dvě volání byla spárovaná.
Vlastně to nejsou funkce, ale (konkrétně na Linuxu) makra. To první končí {
a to druhé začíná }
. Aby to člověk nezapomněl spárovat.
Při použití podmínkových proměnných ve spojení s thread cancellation je tohle naprostá nezbytnost, protože zrušení vlákna při čekání na podmínkovou proměnnou vždy nakonec nechá mutex zamčený. A někdo ho musí odemknout. (V man pthread_cond_wait
je o tom celý odstavec.)
Možná to není zajímavé, ale jsou případy, kdy je to nezbytné. Típnout vlákno (pthread_cancel()
), které čeká na podmínkové proměnné, prostě nelze nijak jinak než za asistence pthread_cleanup_*()
. Jinak ten příslušný mutex už zůstane zamčený a není žádný korektní způsob, jak ho znova odemknout.
Longem prostě vyjadřuji, že mám něco dlouhého a jsem na to hrdý.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.