Já bych se zakládání nových vláken vyhnul, když to jde.
Důležité je všimnout si, že toto není funkce, která se doopravdy provádí dlouho (předpokládám). Pouze se v ní čeká, což se v event-driven programech řeší nějakým timerem.
Původní kód:
do_work1();
sleep(2);
do_work2();
změňte na:
do_work1();
timeout_add(2000, do_work2)
a zařiďte, ať do_work2() vrátí false, jestli správně chápu manuál tak to zajistí aby se funkce opětovně nevolala.
Toto neřeší váš problém? A nebo to je to řešení, které je příliš složité?