Diskuze: C# - Je statická třída thread safe?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Nepřistupuje k žádným proměnným, takže je thread-safe 
ja bych byl asi ohledne toho tvrzeni opatrny.. ja tam vidim praci se soubory.. To,, ze je trida statická neříká nic o tom, jestli je thread safe, nebo není.. stejně tak ani to, zda přistupuje, nebo nepřistupuje k nějakým proměnným..
Tady bych odpověděl tak, že ta třída je thread safe, pokud to co se
používá uvnitř je thread safe 
Díky za reakci
Ohledně
těch souborů, jak jsem psal zanedbal bych případ kdy se dvě vlákna
pokoušejí přistupovat k jednomu souboru, protože tam mi je jasný že to
musím ošetřit nějak jinak. Jde mi vyloženě o tu třídu, abych se mohl
spolehnout že se mi nevrátí data z jiného souboru než očekávám.
a to je právě ono.. nejde jen o soubory.. jde o to, jestli treba vyvojar te knihovni neni mental a nepouziva tam treba singleton jako antipattern..
Todle bohužel nemáš šanci moc zjsitit a musíš do dokumentace knihovni zjistit, jeslti je threadsafe.. Coz z toho kodu by byt mela,.. ale proste nikdy nevis, co programator vymyslel.. staci tak malo, aby to thread safe nebylo.
To, že nelze přistupovat z více objektů/metod a pod. k souboru nemá nic společného s tím, jestli je to thread-safe. Zkrátka se jedná o rozličné pojmy. Thread-safe znamená, že nedojde k žádným neočekávaným vnitřním chybám v důsledku např. toho, že není nějaká operace atomární ačkoliv by měla. To, že vyhazuje jiné zcela legitimní vyjímky se do toho nepočítá.
já neřekl ani slovo o souboru. Stačí aby nějaká knihovna co on používá, používala nevhodně singleton a je hotovo.
ah tak ano.. v prvnim prispevku jsem bohuezl nestastne pouzil priklad se
soubory.. OK, zapomente na soubory. To s tim nesouvisi.
//3rd party
class Foo() {
static int counter = 0;
public getCounter() => Foo.counter;
public increment() => Foo.counter++;
}
Moje "thread safe knihovna"
//kod spusteny ve vice threadech.. nepredavaji se zadne parametry, vytvari se
nova instance Foo, ktera neni sdilena.
var a = new Foo();
for(;;) {
a.Increment();
console.writeline(a.getCounter());
}
Presto ocividne neni kod threadsafe
Stále nevidím problém v tom původním kódu, ty tam máš statickou proměnnou counter, a ta třída zcela určitě thread-safe není, ale Honza nedělá...
Abych se vrátil k mé třídě. Pokud není knihovna třetí strany kterou používám thread safe, tak moje třída není thread safe, to je celkem jasné. Ale pokud to chápu dobře, tak v tomto případě by na tom nemuselo mít vliv to, jestli je moje třída statická nebo ne. Protože pokud je v použité knihovně používán např. singleton, budu mít stejný problém se statikou i bez ní.
@czubehead honza, ne - ale treba ta knihovna co on pouziva ano. Cele co chci rict je to, ze knihovna je threadsafe POUZE (nutne - ne dostacujici pravidlo), pokud jsou knihovny které používá také thread safe.. Tedy z toho kódu co poskytl nelze na 100% říci, že je to thread safe, pokud nemá v dokumentaic napsáno "TATO KNIHOVNA JE THREADSAFE".
A to už tu vůbec nemluvím o něčem složitějším typu ConfigureAwait() u knihoven..
Nechme to být...
Honza:
Presne tak.. Pokud mam odpovedet na otazku v nazvu:
C# - Je statická třída thread safe
Tak odpovím, že na to takto nelze odpovědět.
Zobrazeno 13 zpráv z 13.