DeadLock [C#]

Programovacie jazyky, rady, poradňa...
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

DeadLock [C#]

Príspevok od používateľa harrison314 »

Potrebujem si spravit tester konzoloveho programu.
Tak ma napadal myslienka si v C# spravit jeho sumulator a priamo porovnavat vystupy, lenze nechcem ich bufrovat, lebo mozu mat stovky MB. Preto chcem vystupy porovnavat paralalne, v inom vlakne.

Moja uvaha je takato:
Vlakno t1 bude genrovat vstupy a posieat ich cez synchronizovany front (specialna trieda v C# ) do vlakien simuatora a skutocneho procesu cez paipi ( ten generuje vystup asinchronne a to je problem pri jednoduchsom rieseni ) .
S tichto oboch vlakien pojdu dalsie synchronyzovane fronty do vlakna komparatora, ktori ich bude vyhodnocovat.

A teraz hlavna otazka: stacia mi iba synchronyzovane fronty na to aby nenastal deadlock a ani starvacia vlakien, alebo musim pridat este dlasiu syncronizaciu alebo atomickost operacii ???
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: DeadLock [C#]

Príspevok od používateľa axxis »

v .NETe existuje lock na objekt, ak si raz niekto nieco lockne ostatni s tym nemaju moc co spravit. osobne som robil zatial iba vyukove priklady ale nevidim dovod preco by to nemalo fungovat u Teba.
Ergo, napis svoj kriticky kod s frontami do locku a mal by si byt zahojeny.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DeadLock [C#]

Príspevok od používateľa harrison314 »

axxis : Nechcem byt drzi, ale cital si vobec moj prispevok?

PS: ta spomnana trieda synchronyzovaneho stacku riesi problem Producent - Konzument , bez potrebnbeho dodatocneho zamikania,
robi si to vo vnutri sama
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: DeadLock [C#]

Príspevok od používateľa axxis »

harrison314 napísal:axxis : Nechcem byt drzi, ale cital si vobec moj prispevok?

PS: ta spomnana trieda synchronyzovaneho stacku riesi problem Producent - Konzument , bez potrebnbeho dodatocneho zamikania,
robi si to vo vnutri sama
priznavam, ze Tvoj prispevok som neprecital uplne dostatocne, ale stale si stojim za tym, ze ak sa Ti nezda hento vsetko dostatocne mas pouzit klasicky lock, ale ak ho tie Tvoje triedy pouzivaju samy o sebe tak za prve asi nic viac ani urobit nemozes ( volat semafory alebo robit podobne veci som teda este nikoho neviedl ) a za druhe ani nic viac urobit netreba, pretoze c# bezi z medzikodu takze deadlock na urovni operacneho systemu sa neudeje, lebo je posefovany o uroven vyssie, aj ked to teda nema taku silu ako java
P.S. skus trochu popracovat na svojej gramatike ( nie, na nic tym nenarazam, je to len odporucanie )
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: DeadLock [C#]

Príspevok od používateľa harrison314 »

O vsetkom com si mi napisal viem, v C# niesom ziadny zaciatocnik.
1. stale mi nik neodpovedal na otazku
2. bojim sa neopatrneho pouzivania lokov, koli dedloku, aby mi komparator nezablokoval generator vstupou
3. MONO umoznuje prelozit C# do nativneho kodu
4.
aj ked to teda nema taku silu ako java
Java je este strasny jazyk ( ale na nieco sa hodi ), pozri si v C# klucove slova unsafe,fixed, stackalloc, ..., pretazenie operatorov, lepsi threading, LINQ,PLINQ, paralene programovanie,....
o niecom takom Java ani nesnivala, okrem toho Orcale ju chce rozdelit na OpenJDK ( vraj je to srot ) a platenu Javu, aspon nieco take som pocul
5. k tej gramtike, o tom viem, ale zato ovladam gramitiky formalnych jazykov :lol:
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: DeadLock [C#]

Príspevok od používateľa axxis »

neviem preco by bola java zla :) je to len c# s inou syntaxou...co sa tyka tej synchronizacie tak ju ma vyriesenu najlepsiu zo vsetkych jazykov, je jedinym jazykom na svete, ktory riesi tieto veci bez akychkolvek inych mechanizmov na urovni OS, producer - konzument nie je zdaleka jediny problem paralelnych procesov, to subeh je skutocny problem ( presne Ti to uz nevysvetlim, nepamatam sa :D )

co sa tyka kompilacie c# tak MS nema problem urobit svoj jazyk tak aby bol kompilovany, to iste plati aj pre javu. preklad je len preklad, ale naco by to robili? prisli by o vsetko na co boli vymyslene ony VM, dokonca aj o tu jednoduchu synchronizaciu by prisli :)

inak co sa klucovych slov c# tyka tak som pocul vyjadrenia, ze ho robia tak neskutocne kosaty, ze sa rata s tym, ze ak donho budu pchat dalsie veci bude to taky overkill, ze bude nepouzitelny ( ci to naozaj hrozi neviem, ja sam v nom vyvyjam )

inak java vie pretazovat operatory, robil som to ^^ ( spravil som obycajnym znakom + scitanie matic ) osobne vsak tuto vec povazujem za viac ako zbytocnu, jedine co tym dosiahnes je, ze si spravis z kodu hnoj. kazdy clovek, ktory ucil programovacie jazyky nam taktiez hovoril az to radsej nerobime
a paralelne programovanie WTF? co java nema thready alebo co?

a aby som nebol len OT tak nechapem preco sa bojis toho, ze Ti komparator zablokuje produkovanie vstupov, vsak synchronizacia nenici ostatne procesy akuram im zabrani v subehu na urovni procesoru, neviem si dost dobre predstavit ako by Ti mohol jeden lock znicit ostatne thready ak to mas spravne naprogramovane ( samozrejme ked si vsetko naveky sleepnes tak to nie je ono ), alebo mozno len nie som v oblasti dostatocne vzdelany ^^ threadom som nikdy moc casu nevenoval
btw. ak by k tomu aj nejako doslo, neexistuje v c# nieco ako notifyall z tej strasnej javy? ak by si ho na spravnom mieste volal tak zobudi vsetky spiace procesy a mechanizmus leti dalej
Napísať odpoveď