/ Koordynacja wątków robotnika i przerywnika w Boost - c ++, boost, thread-boost

Koordynacja wątków robotników i przerywników w Boost - c ++, boost, thread-boost

Coś w C ++, a nawet więcej. Na tej podstawie udało mi się stworzyć dwa wątki przykład, jeden pracownik i jeden przerywacz. Ten ostatni śpi, przez this_thread :: sleep_for przez 50 sekund i przerywa robotnikowi, jeśli nie zostanie on zrobiony w tym czasie, z właściwym użyciem while! This_thread :: interrupts_requested () i thread :: interrupt (). Więc jest to bardzo miły i łatwy mechanizm timeout.Mój problem polega na tym, jak przerwać wstawianie snu wcześniej? Mam na myśli to, że jeśli robot zakończy pracę przed upływem 50 sekund, robię to: this_thread :: yield lub this_thread :: interrupting_requested (oba wydają się działać), ale Przerywacz wciąż śpi i musi czekać 50 sekund, aż się obudzi :(

Czy jest jakikolwiek sposób na wykonanie tego mechanizmu limitu czasu, ale jeśli pracownik wykona swoją pracę przed zakończeniem snu, aby powiadomić / obudzić przerywacz?

PS: Czy po zakończeniu wszystkich potrzebuję jakiejś synchronizacji?

Odpowiedzi:

0 dla odpowiedzi № 1

Twoja przerywana nitka nie powinna spaćbezwarunkowo przez 50 sekund, ale poczekaj na zmienną warunkową przez 50 sekund, jeśli wątek roboczy zakończy się wcześniej, zasygnalizuje warunkowe zmiażdżenie i przerywanie. Możesz użyć albo std :: conditional_variable lub jeden z boost o tej samej nazwie