Diskuze: Promenna mezi instancemi

C# .NET .NET (C# a Visual Basic) Promenna mezi instancemi American English version English version

Avatar
xpumpa
Člen
Avatar
xpumpa:

Zdravima a prosim o nazory.
Mejme tridu s asynchronimi metodami (async,await). Teto tridy udelame 5 instanci. Potrebuji, aby kazda instance nastavovala urcitou vnitrni hodnotu, kterou ale vidi vsechny ostatni instance. Napadla me pouze staticka promenna ve tride, ktera pri zmene pouzije lock. Diky.

 
Odpovědět 15.3.2014 20:52
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na xpumpa
David Čápka:

Tady záleží co děláš, privátní statická proměnná je IMHO ok, ale všechno jde vždy vyřešit i bez statiky.

Nahoru Odpovědět  +1 16.3.2014 8:45
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
xpumpa
Člen
Avatar
Odpovídá na David Čápka
xpumpa:

A jak ? Jako staticka s lock mi funguje a je to thread-safe. Ale jak to vyresit bez statiky me vubec nenapada. Sdilena promena napric instancemi stejne tridy. Hledal jsem vsemozne, ale asi zadavam spatna klicova slova.

 
Nahoru Odpovědět 19.3.2014 15:11
Avatar
Posix
Člen
Avatar
Odpovídá na xpumpa
Posix:

On říkal, že to jde vyřešit, ale neříkal, že to bude pěkně hnusné :D

Nahoru Odpovědět 19.3.2014 21:29
Proč to dělat jednoduše, když to jde složitě.
Avatar
coells
Redaktor
Avatar
Odpovídá na Posix
coells:

V 99% případů je hnusný kód ten, kde se objevuje slovo static. Vždy to jde vyřešit jinak a takové řešení bude elegantní a čitelnější. Nejjednodušší způsob takového řešení je nadřazený kontext, ve kterém instance běží.

Btw, async a await neběží v separátním vlákně, takže není důvod sdílené proměnné synchronizovat přes monitory (direktiva lock). Dokonce ani není potřeba používat modifikátor volatile, protože začátky a konce tasku jsou označené jako memory barriers.

 
Nahoru Odpovědět 19.3.2014 22:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.