.[ ČeskéHry.cz ].
Přerušení cyklu v threadu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 8. leden 2014, 10:09:44    Předmět: Přerušení cyklu v threadu Odpovědět s citátem

Mám thread, na kterém běží velký výpočet - je tam dlouhý cycklus. Korektní cesta, jak vlákno ukončit je, myslím, přidat k podmínce do cyklu ještě nějaký bool flag "isAborted". Tento flag pak nastavím na true z main threadu (třeba když uživatel klikne na tlačítko abort).

Teď ta otázka:
Ten flag se sdílí mezi thready, tudíž by tam měl být Mutex. Ale to je brzda, kterou si v takovém výpočtu nemůžu dovolit. Implementoval jsem to bez mutexu jako "volatile int", může to stačit? Říkal jsem si, že kdyby se ta proměnná isAborted dostala do nekonzistentního stavu, tak jediný, co se může stát je, že ta podmínka prostě projde, nebo neprojde (ať už isAborted obsahuje cokoliv). Ale nejsem v tomhle moc kovaný. Nevíte, může dojít i k nějaké neplatné operaci, nebo tak něco?
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dlaha



Založen: 30. 07. 2007
Příspěvky: 598
Bydliště: Olomouc

PříspěvekZaslal: 8. leden 2014, 11:14:37    Předmět: Odpovědět s citátem

Čtení a zápis int by mělo být v každém slušném jazyku atomické.
Tady to rozepisují z pohledu C++
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=469
_________________
Other Inside
Greenlitnuto!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 8. leden 2014, 11:20:00    Předmět: Odpovědět s citátem

Díky. "Mělo by". Ale dá se na to spolehnout?
Co by se stalo, kdyby ta operace atomická nebyla? Pouze tiše přečtu z paměti nesmysl, nebo se zasignalizuje nějaká runtime chyba? Možná to moc řeším, ale jde mi o princip.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 8. leden 2014, 11:21:43    Předmět: Odpovědět s citátem

na tohle IMHO vubec neni treba synchronizace skrz mutex, mutex se pouziva na mistech kde dva pristupuji k jedne promenne a oba zapisuji a musi znat korektni predchozi stav

tady je pouziti isAborted uplne v pohode

jinak jeste by slo uzit toto - http://msdn.microsoft.com/en-us/library/windows/desktop/ms684122(v=vs.85).aspx - ale porad to vidim jako kanon na vrabce
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 8. leden 2014, 11:26:11    Předmět: Odpovědět s citátem

Bezva, tak to bude asi stačit, to rád slyším. Díky.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 8. leden 2014, 11:26:23    Předmět: Odpovědět s citátem

Zápis není zdaleka atomický, ale když probíhá současně čtení i zápis, tak čtení vrátí buď true nebo false. Žádné runtime chyby ani omylem nehrozí. Takže pokud z jednoho vlákna čteč a v druhém zapisuješ a nevadí tí, že se třeba omylem provede maximálně jeden cyklus navíc, tak mutex nepotřebuješ. Mohlo by se to chovat neočekávaně jen kdybys zapisoval ze dvou vláken najednou.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
LukeMak



Založen: 08. 02. 2013
Příspěvky: 16

PříspěvekZaslal: 8. leden 2014, 11:36:52    Předmět: Re: Přerušení cyklu v threadu Odpovědět s citátem

Presne tohle jsem kdysi resil taky - "bal" jsem se, aby to nedelalo neco neocekavaneho a potreboval jsem taky jen takovou primitivni synchronizaci. Nakonec jsem volatile int pouzil a vse fungovalo spravne a bez problemu a i kdyby se stalo, ze by se z pameti precetl nesmysl, tak to v mem pripade nevadilo, asi tak jako ve tvem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 8. leden 2014, 11:40:48    Předmět: Odpovědět s citátem

Tak super. Tím je to vyřešené :-). Díky.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna