🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

7 total messages Started by Borneq Thu, 13 Apr 2017 14:27
Jak wymusić zakończenie wątku?
#309234
Author: Borneq
Date: Thu, 13 Apr 2017 14:27
16 lines
1557 bytes
Używam #include <thread> które to wątki działają i na Linuksie i na Windows.
Mam coś takiego : za pomocą dużej ilości wątków zapisuję do bazy Neo4j.
Raz na jakiś czas zdarza się że wątek blokuje się na zapytaniu.
Wątek główny wie, jak dawno temu wątek poboczny usiłował coś zapisać do 
bazy, wtedy po przekroczeniu czasu mógłby go zrestartować.
Ale
jak zrobię delete threads[i], wtedy kończy się cały program!
bo jest
     ~thread()
     {
       if (joinable())
	std::terminate();
     }
a join trwał będzie w nieskończoność.
Czy pobrać Id wątku i zabić go procedurą zależną od systemu 
operacyjnego? gwałtownie zabity może mieć pootwierane jakieś zasoby.
Re: Jak wymusić zakończenie wątku?
#309235
Author: Sebastian Biały
Date: Thu, 13 Apr 2017 17:22
13 lines
1493 bytes
On 4/13/2017 4:27 PM, Borneq wrote:
> Czy pobrać Id wątku i zabić go procedurą zależną od systemu
> operacyjnego? gwałtownie zabity może mieć pootwierane jakieś zasoby.

Owszem i dlatego nie rób tego, jest to absolutnie niewskazane bo jest 
nieprzewidywalne.

Jeśli watek zablokowany jest na IO to sprawdź czy możesz do niego wysłać 
"sygnał" który zrobi interrupta. Niektóre bibliteki to potafią. Zazwyczj 
wylatują wtedy z IO z jakimś błedem.

Ponadto nie ma tam timed-wait/timed-read na IO? Blokowanie watku w 
nieskończoność jest powodem problemów.
Re: Jak wymusić zakończenie wątku?
#309236
Author: Andyy
Date: Thu, 13 Apr 2017 17:44
14 lines
1557 bytes
W dniu 13.04.2017 o 19:22, Sebastian Biały pisze:
> Jeśli watek zablokowany jest na IO to sprawdź czy możesz do niego wysłać
> "sygnał" który zrobi interrupta. Niektóre bibliteki to potafią. Zazwyczj
> wylatują wtedy z IO z jakimś błedem.

W pthread jest pthread_cancel, czy pthread_kill jest bezpieczniejsze?


> Ponadto nie ma tam timed-wait/timed-read na IO? Blokowanie watku w
> nieskończoność jest powodem problemów.

Można ustawić, ale w Neo4j nie ma podziału na bazy, jest jeden zbiór na 
komputer na wszystkie aplikacje, i ustawienie timeouta popsuło by 
działanie innych aplikacji, które nie wznawiają,
Re: Jak wymusić zakończenie wątku?
#309237
Author: Sebastian Biały
Date: Thu, 13 Apr 2017 17:48
19 lines
1964 bytes
On 4/13/2017 7:44 PM, Andyy wrote:
>> Jeśli watek zablokowany jest na IO to sprawdź czy możesz do niego wysłać
>> "sygnał" który zrobi interrupta. Niektóre bibliteki to potafią. Zazwyczj
>> wylatują wtedy z IO z jakimś błedem.
> W pthread jest pthread_cancel, czy pthread_kill jest bezpieczniejsze?

Nie jest. Zostawia mutexy i semafory nad którymi nie masz kontroli, w 
stanie nieokreślonym. jesli watek czeka w IO skutki mogą być rózne w 
zlaezności od OSa i samego IO.

>> Ponadto nie ma tam timed-wait/timed-read na IO? Blokowanie watku w
>> nieskończoność jest powodem problemów.
> Można ustawić, ale w Neo4j nie ma podziału na bazy, jest jeden zbiór na
> komputer na wszystkie aplikacje, i ustawienie timeouta popsuło by
> działanie innych aplikacji, które nie wznawiają,

Nie rozumiem. Write ogólnie spedza czas na czekaniu na wolne dma I/O. 
Jaka róznica czy czeka w systemie czy co jakiś czas wróci co Ciebie a ty 
wywołasz znowu?
Re: Jak wymusić zakończenie wątku?
#309239
Author: Przemek Biernat
Date: Fri, 21 Apr 2017 20:54
1 lines
1544 bytes
A czy na IO nie można ustawić jakiegoś timeout'a dopiero coś zaczynam z tym mieszać ale wydaje się to logicznym rozwiązaniem dodałbym jeszcze flage opakowaną sekcją krytyczną i przy zgaszeniu flagi wątek milknie.
Re: Jak wymusić zakończenie wątku?
#309240
Author: Adam Wysocki
Date: Tue, 25 Apr 2017 14:48
9 lines
1894 bytes
Przemek Biernat <biernat.przemyslaw@gmail.com> wrote:

> A czy na IO nie można ustawić jakiegoś timeout'a dopiero coś zaczynam z tym mieszać ale wydaje się to logicznym rozwiązaniem dodałbym jeszcze flage opakowaną sekcją krytyczną i przy zgaszeniu flagi wątek milknie.

Czy mógłbyś używać przecinków i łamać linie?

-- 
[ Email: a@b a=grp b=chmurka.net ]
[ Web:   http://www.chmurka.net/ ]
Re: Jak wymusić zakończenie wątku?
#309241
Author: hardest.metalband
Date: Tue, 25 Apr 2017 17:34
1 lines
1620 bytes
No mógłbym.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads