dotnetomaniak.pl - Artykuły z tagiem synchronizacjadotnetomaniak.pl - Artykuły z tagiem synchronizacja2024-03-29T10:51:07Zhttps://dotnetomaniak.pl/Tags/synchronizacjaCopyright (c) dotnetomaniak.pldotnetomaniak.pl Atom Generatordotnetomaniak.pl webmasteradmin@dotnetomaniak.plhttps://dotnetomaniak.pl/Assets/Images/fav.icohttps://dotnetomaniak.pl/Assets/Images/dotnetomaniak_logo-negatyw_small.png19025https://dotnetomaniak.pl/Gdy-Kasia-gubi-CQL-e-Apache-Cassandra-i-NTP-Wiadro-DanychGdy Kasia gubi CQL-e - Apache Cassandra i NTP - Wiadro Danych2019-10-18T13:11:45Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_zsQOa3Z8hUyMdTIf8N0rpA.png"/></div><div>Mieliście kiedyś taką sytuację przy Apache Cassandra, że aplikacja robi UPDATE na bazie danych ale nigdzie nie ma śladu po tym UPDATE? Jak już jej trochę poużywałeś, to prawdopodobnie znasz temat. Jak dopiero z nią zaczynasz…
W projekcie używamy Cassandry która, póki co, na każdym ze środowisk składa się z jednego node-a. Każdy z serwisów ma swój keyspace. Wszystko pięknie działało. Nie było problemów.
Do czasu. Była potrzeba przepisania jednego z serwisów i tymczasowo dwa serwisy (a czasami jeden ser...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Gdy-Kasia-gubi-CQL-e-Apache-Cassandra-i-NTP-Wiadro-Danych"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=https%3a%2f%2fwiadrodanych.pl%2fbazy-danych%2fcassandra%2fgdy-kasia-gubi-cql-e-apache-cassandra-i-ntp%2f" style="border:0px"/></a></div></div>mszymczykhttps://dotnetomaniak.pl/Users/yBR97Zmw1ES3aCuyQj33bg2019-10-21T05:42:20Zhttps://dotnetomaniak.pl/Gdy-Kasia-gubi-CQL-e-Apache-Cassandra-i-NTP-Wiadro-Danych1700Mieliście kiedyś taką sytuację przy Apache Cassandra, że aplikacja robi UPDATE na bazie danych ale nigdzie nie ma śladu po tym UPDATE? Jak już jej trochę poużywałeś, to prawdopodobnie znasz temat. Jak dopiero z nią zaczynasz…
W projekcie używamy Cassandry która, póki co, na każdym ze środowisk składa się z jednego node-a. Każdy z serwisów ma swój keyspace. Wszystko pięknie działało. Nie było problemów.
Do czasu. Była potrzeba przepisania jednego z serwisów i tymczasowo dwa serwisy (a czasami jeden ser...https://wiadrodanych.pl/bazy-danych/cassandra/gdy-kasia-gubi-cql-e-apache-cassandra-i-ntp/http://dotnetomaniak.pl/Data/Thumbnails/small_zsQOa3Z8hUyMdTIf8N0rpA.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Blog-Archive-Anulowanie-watkow-a-synchronizacjaPiotr Zieliński » Anulowanie wątków a synchronizacja2013-11-14T18:17:08Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_Tsc3vm0x1EqAio42P_Q1Xg.png"/></div><div>W .NET można anulować wątki za pomocą tokena. Oczywiście nie należy używać metody Abort czy Cancel, ale o tym już wiele razy pisałem – w skrócie nie wiadomo kiedy taki wątek zostanie przerwany. Użycie tokena jest proste tzn. (przykład MSDN):class Program
{
staticvoid Main()
{
var tokenSource2 =new CancellationTokenSource();
CancellationToken ct = tokenSource2.Token;
var task = Task.Factory.StartNew(() =&gt;
{
// Were we already canceled? ct.T...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Blog-Archive-Anulowanie-watkow-a-synchronizacja"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1744" style="border:0px"/></a></div></div>Paweł Łukasikhttps://dotnetomaniak.pl/Users/lI7X-wDfeE2RoUfuiihoOg2013-11-24T07:23:48Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Blog-Archive-Anulowanie-watkow-a-synchronizacja11400W .NET można anulować wątki za pomocą tokena. Oczywiście nie należy używać metody Abort czy Cancel, ale o tym już wiele razy pisałem – w skrócie nie wiadomo kiedy taki wątek zostanie przerwany. Użycie tokena jest proste tzn. (przykład MSDN):class Program
{
staticvoid Main()
{
var tokenSource2 =new CancellationTokenSource();
CancellationToken ct = tokenSource2.Token;
var task = Task.Factory.StartNew(() =&gt;
{
// Were we already canceled? ct.T...http://www.pzielinski.com/?p=1744http://dotnetomaniak.pl/Data/Thumbnails/small_Tsc3vm0x1EqAio42P_Q1Xg.pnghttps://dotnetomaniak.pl/Piotr-ZielinskiCode-review-synchronizacja-danych-przypisaniePiotr Zieliński » Code review: synchronizacja danych, przypisanie2013-08-07T16:44:54Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_ByZpcDvbmki4lPAsf5ol-w.png"/></div><div>Często można usłyszeć, że przypisania są zawsze bezpieczne w wielowątkowości i powinniśmy martwić się np. inkrementacją. Jest to prawda dla Int32 ale dla long już nie zawsze. Przykład:internalclass Program
{
privatestaticlong _x =0;
privatestaticvoid Main(string[] args)
{
Task.Factory.StartNew(Task1);
Task.Factory.StartNew(Task2);
Thread.Sleep(5000);
}
privatestaticvoid Task2()
{
while (true)
{
Console.WriteLine(_x);
}
}
privat...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-ZielinskiCode-review-synchronizacja-danych-przypisanie"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1637" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2013-08-17T07:16:14Zhttps://dotnetomaniak.pl/Piotr-ZielinskiCode-review-synchronizacja-danych-przypisanie11370Często można usłyszeć, że przypisania są zawsze bezpieczne w wielowątkowości i powinniśmy martwić się np. inkrementacją. Jest to prawda dla Int32 ale dla long już nie zawsze. Przykład:internalclass Program
{
privatestaticlong _x =0;
privatestaticvoid Main(string[] args)
{
Task.Factory.StartNew(Task1);
Task.Factory.StartNew(Task2);
Thread.Sleep(5000);
}
privatestaticvoid Task2()
{
while (true)
{
Console.WriteLine(_x);
}
}
privat...http://www.pzielinski.com/?p=1637http://dotnetomaniak.pl/Data/Thumbnails/small_ByZpcDvbmki4lPAsf5ol-w.pnghttps://dotnetomaniak.pl/Azure-i-jego-problem-z-liczeniem-czasuczyli-jak-nauczyc-chmure-ze-kazda-sekunda-ma-znaczenieAzure i jego problem z liczeniem czasu–czyli jak nauczyć chmurę, że każda sekunda ma znaczenie | Marcin Borecki - Making a difference everyday2013-07-18T08:34:50Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_NAVdjp_Fy0OKUOZQC8Gc3Q.png"/></div><div>A to niespodzianka…serwery w chmurze czasu nie liczą – czyżby były tak szczęśliwe? Wracając do meritum sprawy…jeżeli macie kilka…dziesiąt serwerów w Azure, które robią coś razem zauważycie mały problem… niezgodność czasu.
W przypadku serwerów jakie mamy w projekcie PlaceChallenge, to było od 2 do 47 sekund – powiedziałbym, że dość dużo.
Po rozmowie z miłym Panem z Indii wiadomo co jest problemem… problem to Hyper-V, który hostuję te maszyny. Hyper-V (wirtualizator) ma problem z odpowiednim synchro...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Azure-i-jego-problem-z-liczeniem-czasuczyli-jak-nauczyc-chmure-ze-kazda-sekunda-ma-znaczenie"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fmarcinborecki.pl%2f2013%2f07%2f16%2fazure-i-jego-problem-z-liczeniem-czasuczyli-jak-nauczyc-chmure-ze-kazda-sekunda-ma-znaczenie%2f" style="border:0px"/></a></div></div>mboreckihttps://dotnetomaniak.pl/Users/5CtFaQ--VEOGbXvhOSsD3g2013-07-27T11:35:00Zhttps://dotnetomaniak.pl/Azure-i-jego-problem-z-liczeniem-czasuczyli-jak-nauczyc-chmure-ze-kazda-sekunda-ma-znaczenie11250A to niespodzianka…serwery w chmurze czasu nie liczą – czyżby były tak szczęśliwe? Wracając do meritum sprawy…jeżeli macie kilka…dziesiąt serwerów w Azure, które robią coś razem zauważycie mały problem… niezgodność czasu.
W przypadku serwerów jakie mamy w projekcie PlaceChallenge, to było od 2 do 47 sekund – powiedziałbym, że dość dużo.
Po rozmowie z miłym Panem z Indii wiadomo co jest problemem… problem to Hyper-V, który hostuję te maszyny. Hyper-V (wirtualizator) ma problem z odpowiednim synchro...http://marcinborecki.pl/2013/07/16/azure-i-jego-problem-z-liczeniem-czasuczyli-jak-nauczyc-chmure-ze-kazda-sekunda-ma-znaczenie/http://dotnetomaniak.pl/Data/Thumbnails/small_NAVdjp_Fy0OKUOZQC8Gc3Q.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-AutoResetEventManualResetEventsynchronizacja-miedzy-procesamiPiotr Zieliński » AutoResetEvent\ManualResetEvent–synchronizacja między procesami2013-06-14T11:47:43Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_Yeu0R47UJUq8KOPx3_fa3Q.png"/></div><div>AutoResetEvent\ManualResetEvent może być używany do synchronizacji międzyprocesowej tak samo jak np. mutex. Posiada podobny zestaw metod do tworzenia obiektu z nazwą oraz późniejszego jego otwierania.
Aby móc go użyć do synchronizacji międzyprocesowej należy oczywiście nadać obiektowi nazwę – tak samo jak to jest z Mutex. W tym problem, że konstruktory ManualResetEvent czy AutoResetEvent nie przyjmują takich parametrów. Zaglądając jednak do dokumentacji dowiemy się, że:publicsealedclass ManualResetEvent...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-AutoResetEventManualResetEventsynchronizacja-miedzy-procesami"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1581" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2013-06-24T06:42:06Zhttps://dotnetomaniak.pl/Piotr-Zielinski-AutoResetEventManualResetEventsynchronizacja-miedzy-procesami2670AutoResetEvent\ManualResetEvent może być używany do synchronizacji międzyprocesowej tak samo jak np. mutex. Posiada podobny zestaw metod do tworzenia obiektu z nazwą oraz późniejszego jego otwierania.
Aby móc go użyć do synchronizacji międzyprocesowej należy oczywiście nadać obiektowi nazwę – tak samo jak to jest z Mutex. W tym problem, że konstruktory ManualResetEvent czy AutoResetEvent nie przyjmują takich parametrów. Zaglądając jednak do dokumentacji dowiemy się, że:publicsealedclass ManualResetEvent...http://www.pzielinski.com/?p=1581http://dotnetomaniak.pl/Data/Thumbnails/small_Yeu0R47UJUq8KOPx3_fa3Q.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Code-Review-MonitorEnter-kilka-wzorcowPiotr Zieliński » Code Review: Monitor.Enter – kilka wzorców2013-05-18T14:07:12Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_HforoTbS20G_NBpaRPUERA.png"/></div><div>Klasa Monitor to chyba najpopularniejszy, najłatwiejszy i często najlepszy sposób synchronizacji danych w .NET. Większość programistów używa słowa kluczowego lock zamiast bezpośrednio Monitor.Enter. W większości przypadków jest to poprawne i zdecydowanie najbardziej przejrzyste. Dzisiaj chciałbym przyjrzeć się kilku sposobom konstrukcji Monitor.Enter\MonitorExit. Pierwszy, zdecydowanie najgorszy to:Monitor.Enter(_sync);
// sekcja krytyczna tutaj
Monitor.Exit(_sync);
W powyższym kodzie brakuje obsługi...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Code-Review-MonitorEnter-kilka-wzorcow"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1550" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2013-05-28T05:19:08Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Code-Review-MonitorEnter-kilka-wzorcow11420Klasa Monitor to chyba najpopularniejszy, najłatwiejszy i często najlepszy sposób synchronizacji danych w .NET. Większość programistów używa słowa kluczowego lock zamiast bezpośrednio Monitor.Enter. W większości przypadków jest to poprawne i zdecydowanie najbardziej przejrzyste. Dzisiaj chciałbym przyjrzeć się kilku sposobom konstrukcji Monitor.Enter\MonitorExit. Pierwszy, zdecydowanie najgorszy to:Monitor.Enter(_sync);
// sekcja krytyczna tutaj
Monitor.Exit(_sync);
W powyższym kodzie brakuje obsługi...http://www.pzielinski.com/?p=1550http://dotnetomaniak.pl/Data/Thumbnails/small_HforoTbS20G_NBpaRPUERA.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Wydajnosc-spinning-a-synchronizacja-kernelPiotr Zieliński » Wydajność: spinning a synchronizacja kernel2013-03-14T21:01:53Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_1JMzmr9HQ0iXo7D-a0QIDA.png"/></div><div>Wielokrotnie pisałem o różnych metodach definiowania sekcji krytycznej w kodzie. Do dyspozycji mamy spinning, który nie usypia wątku. Tak naprawdę dla systemu Windows, taki wątek wciąż istnieje i wykonuje pracę – innymi słowy marnuje czas CPU. Jeśli chcemy zatrzymać wątek na krótko wtedy jest to bardzo wydajne ponieważ nie musimy zmieniać kontekstu (BARDZO kosztowne), korzystać z funkcji Windows (spinning to czysta metoda .NET) czy planować (scheduling) następnych wątków. Jeśli mechanizmy takie jak spin...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Wydajnosc-spinning-a-synchronizacja-kernel"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1499" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2013-03-24T13:49:12Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Wydajnosc-spinning-a-synchronizacja-kernel1800Wielokrotnie pisałem o różnych metodach definiowania sekcji krytycznej w kodzie. Do dyspozycji mamy spinning, który nie usypia wątku. Tak naprawdę dla systemu Windows, taki wątek wciąż istnieje i wykonuje pracę – innymi słowy marnuje czas CPU. Jeśli chcemy zatrzymać wątek na krótko wtedy jest to bardzo wydajne ponieważ nie musimy zmieniać kontekstu (BARDZO kosztowne), korzystać z funkcji Windows (spinning to czysta metoda .NET) czy planować (scheduling) następnych wątków. Jeśli mechanizmy takie jak spin...http://www.pzielinski.com/?p=1499http://dotnetomaniak.pl/Data/Thumbnails/small_1JMzmr9HQ0iXo7D-a0QIDA.pnghttps://dotnetomaniak.pl/C-na-blache-Program-wielowatkowyC# na blache: Program wielowątkowy2012-06-30T08:00:08Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_nIu9mxPM9UiD4cJl87pVRw.png"/></div><div>Napiszemy prosty program wielowątkowy, zrobimy synchronizację z głównym wątkiem (aby czekał dokładnie do momentu zakończenia drugiego wątku) i dodatkowo prześlemy parametr do nowo tworzonego wątku. To wszystko jest często niezbędne w aplikacjach i warto wiedzieć jak to się robi.
Poprzednio wątki synchronizowane były za pomocą zmiennej bool. Nie jest to dobre rozwiązanie. Dodatkowo wątek główny musiał sprawdzać co pewien czas wartość tej zmiennej. Tutaj rozwiążemy to nieco bardziej optymalnie.
Stw...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/C-na-blache-Program-wielowatkowy"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fcsharpnablache.blogspot.com%2f2012%2f05%2fprogram-wielowatkowy.html" style="border:0px"/></a></div></div>sikor02https://dotnetomaniak.pl/Users/kaxXfYp92kafHtEpeJCOJg2012-07-10T09:05:58Zhttps://dotnetomaniak.pl/C-na-blache-Program-wielowatkowy23220Napiszemy prosty program wielowątkowy, zrobimy synchronizację z głównym wątkiem (aby czekał dokładnie do momentu zakończenia drugiego wątku) i dodatkowo prześlemy parametr do nowo tworzonego wątku. To wszystko jest często niezbędne w aplikacjach i warto wiedzieć jak to się robi.
Poprzednio wątki synchronizowane były za pomocą zmiennej bool. Nie jest to dobre rozwiązanie. Dodatkowo wątek główny musiał sprawdzać co pewien czas wartość tej zmiennej. Tutaj rozwiążemy to nieco bardziej optymalnie.
Stw...http://csharpnablache.blogspot.com/2012/05/program-wielowatkowy.htmlhttp://dotnetomaniak.pl/Data/Thumbnails/small_nIu9mxPM9UiD4cJl87pVRw.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Struktura-SpinWait-i-synchronizacja-bez-uzycia-blokadPiotr Zieliński » Struktura SpinWait i synchronizacja bez użycia blokad2012-06-03T14:01:33Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_4O4SZJhvI0KnMzLc9QhIrA.png"/></div><div>W ostatnim poście pisałem o różnych mechanizmach opartych o Spin. Zachęcam do przejrzenia ostatnich wpisów ponieważ bez tego trudno będzie zrozumieć dzisiejszy post.
SpinWait jest strukturą, w której najważniejsza metoda to SpinOnce. SpinOnce przez pierwsze 10 wywołań wykonuje klasyczny Spin (patrz poprzednie posty) dzięki czemu nie musimy obawiać się koszty związanego z uśpieniem wątku, zmianą kontekstu itp. SpinOnce jest jednak na tyle inteligentny, że po 10 wywołaniach zmienia swoje zachowanie:Po 10...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Struktura-SpinWait-i-synchronizacja-bez-uzycia-blokad"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1186" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2012-06-13T10:36:12Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Struktura-SpinWait-i-synchronizacja-bez-uzycia-blokad1520W ostatnim poście pisałem o różnych mechanizmach opartych o Spin. Zachęcam do przejrzenia ostatnich wpisów ponieważ bez tego trudno będzie zrozumieć dzisiejszy post.
SpinWait jest strukturą, w której najważniejsza metoda to SpinOnce. SpinOnce przez pierwsze 10 wywołań wykonuje klasyczny Spin (patrz poprzednie posty) dzięki czemu nie musimy obawiać się koszty związanego z uśpieniem wątku, zmianą kontekstu itp. SpinOnce jest jednak na tyle inteligentny, że po 10 wywołaniach zmienia swoje zachowanie:Po 10...http://www.pzielinski.com/?p=1186http://dotnetomaniak.pl/Data/Thumbnails/small_4O4SZJhvI0KnMzLc9QhIrA.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Synchronizacja-za-pomoca-CountdownEventPiotr Zieliński » Synchronizacja za pomocą CountdownEvent2012-05-27T16:32:07Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_nKpyrd8mw0CIMVERtBrnPA.png"/></div><div>W ostatnich postach opisuje różne mechanizmy synchronizacji w c#. Jak widać, jest tego na prawdę wiele i sama znajomość słowa lock nie wystarcza jeśli poważnie myśli się o algorytmach współbieżnych. Dziś kolejna metoda synchronizacji a mianowicie klasa CountdownEvent. Ostatnie posty oprócz wprowadzenia do wspomnianych klas stanowią wstęp do kolekcji współbieżnych, które zamierzam omówić wkrótce.
Konstruktor CountdownEvent przyjmuje liczbę całkowita (zwykle większą od 0), która stanowi wartość początkową...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Synchronizacja-za-pomoca-CountdownEvent"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1181" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2012-06-06T16:24:35Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Synchronizacja-za-pomoca-CountdownEvent21120W ostatnich postach opisuje różne mechanizmy synchronizacji w c#. Jak widać, jest tego na prawdę wiele i sama znajomość słowa lock nie wystarcza jeśli poważnie myśli się o algorytmach współbieżnych. Dziś kolejna metoda synchronizacji a mianowicie klasa CountdownEvent. Ostatnie posty oprócz wprowadzenia do wspomnianych klas stanowią wstęp do kolekcji współbieżnych, które zamierzam omówić wkrótce.
Konstruktor CountdownEvent przyjmuje liczbę całkowita (zwykle większą od 0), która stanowi wartość początkową...http://www.pzielinski.com/?p=1181http://dotnetomaniak.pl/Data/Thumbnails/small_nKpyrd8mw0CIMVERtBrnPA.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Semafor-w-cPiotr Zieliński» Semafor w c#2012-05-21T18:25:47Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_UkzYRExZAUmnneSz2xJ36w.png"/></div><div>Dziś kolejny post o synchronizacji w c#. Semafor to bardzo popularna forma limitowania liczby wątków, które mogą mieć dostęp do danego kodu. Nie chcę omawiać tutaj podstaw semafora, ale myślę, że warto przypomnieć ogólną zasadę. Pseudokod (źródło Wikipedia):procedure V (S : Semaphore);
begin
(* Operacja atomowa: inkrementacja semafora *)
S := S +1;
end;
(* Operacja atomowa: dekrementacja semafora )
procedure P (S : Semaphore);
begin
( Cała operacja jest atomowa *)
repeat
Wait()...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Semafor-w-c"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1176" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2012-05-30T18:41:04Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Semafor-w-c32620Dziś kolejny post o synchronizacji w c#. Semafor to bardzo popularna forma limitowania liczby wątków, które mogą mieć dostęp do danego kodu. Nie chcę omawiać tutaj podstaw semafora, ale myślę, że warto przypomnieć ogólną zasadę. Pseudokod (źródło Wikipedia):procedure V (S : Semaphore);
begin
(* Operacja atomowa: inkrementacja semafora *)
S := S +1;
end;
(* Operacja atomowa: dekrementacja semafora )
procedure P (S : Semaphore);
begin
( Cała operacja jest atomowa *)
repeat
Wait()...http://www.pzielinski.com/?p=1176http://dotnetomaniak.pl/Data/Thumbnails/small_UkzYRExZAUmnneSz2xJ36w.pnghttps://dotnetomaniak.pl/Piotr-Zielinski-Synchronizacja-za-pomoca-SpinLockPiotr Zieliński » Synchronizacja za pomocą SpinLock2012-05-18T19:23:08Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_4dOgUT_2E0SKJhHbyRuEeQ.png"/></div><div>W .NET istnieje wiele sposobów synchronizacji pracy wątków. O dużej części z nich pisałem już na blogu (z ciekawszych np. klasa Barrier ). Najpopularniejszym i najłatwiejszym sposobem jest użycie słowa kluczowego lock. W wielu przypadkach jest to najlepszy i najbezpieczniejszy wybór. SpinLock to zupełnie inne podejście.
W przypadku lock, wątek jest usypiany i budzony gdy przyjdzie na niego kolej. Ma to kilka poważnych wad. Wiążą się one z szeregowaniem oraz zmianą kontekstu. Zmiana kontekstu jest dość c...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Piotr-Zielinski-Synchronizacja-za-pomoca-SpinLock"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d1175" style="border:0px"/></a></div></div>pzielinskihttps://dotnetomaniak.pl/Users/uL1CEj4isEuRvajW8gS3pQ2012-05-27T22:36:10Zhttps://dotnetomaniak.pl/Piotr-Zielinski-Synchronizacja-za-pomoca-SpinLock31970W .NET istnieje wiele sposobów synchronizacji pracy wątków. O dużej części z nich pisałem już na blogu (z ciekawszych np. klasa Barrier ). Najpopularniejszym i najłatwiejszym sposobem jest użycie słowa kluczowego lock. W wielu przypadkach jest to najlepszy i najbezpieczniejszy wybór. SpinLock to zupełnie inne podejście.
W przypadku lock, wątek jest usypiany i budzony gdy przyjdzie na niego kolej. Ma to kilka poważnych wad. Wiążą się one z szeregowaniem oraz zmianą kontekstu. Zmiana kontekstu jest dość c...http://www.pzielinski.com/?p=1175http://dotnetomaniak.pl/Data/Thumbnails/small_4dOgUT_2E0SKJhHbyRuEeQ.pnghttps://dotnetomaniak.pl/mgrzegnet-Admin-on-Rails-lock-internalsmgrzeg.net - Admin on Rails :) : lock() internals2011-04-08T22:04:30Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_JzHdfOWLa0qnsYQXZum5Aw.png"/></div><div>Mechanizmy wspierające tworzenie aplikacji wielowątkowych są obecne w .NET od zarania dziejów. Istnieją klasy opakowujące funkcje i obiekty systemowe, są także mechanizmy dostępne tylko w .NET i udostępnione w postaci wygodnych konstrukcji językowych. Jedną z takich konstrukcji obecnych w C# jest słowo kluczowe lock, które usprawnia synchronizację między wątkami praktycznie bez wpływu na wydajność. Lock przeszedł drobny lifting w wersji 4.0, jednak szczegóły omówimy na końcu.
Metoda 1: Kod haszowy & lock
...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/mgrzegnet-Admin-on-Rails-lock-internals"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fzine.net.pl%2fblogs%2fmgrzeg%2farchive%2f2011%2f04%2f08%2flock-internals.aspx" style="border:0px"/></a></div></div>Paweł Łukasikhttps://dotnetomaniak.pl/Users/lI7X-wDfeE2RoUfuiihoOg2011-04-18T07:04:28Zhttps://dotnetomaniak.pl/mgrzegnet-Admin-on-Rails-lock-internals3890Mechanizmy wspierające tworzenie aplikacji wielowątkowych są obecne w .NET od zarania dziejów. Istnieją klasy opakowujące funkcje i obiekty systemowe, są także mechanizmy dostępne tylko w .NET i udostępnione w postaci wygodnych konstrukcji językowych. Jedną z takich konstrukcji obecnych w C# jest słowo kluczowe lock, które usprawnia synchronizację między wątkami praktycznie bez wpływu na wydajność. Lock przeszedł drobny lifting w wersji 4.0, jednak szczegóły omówimy na końcu.
Metoda 1: Kod haszowy & lock
...http://zine.net.pl/blogs/mgrzeg/archive/2011/04/08/lock-internals.aspxhttp://dotnetomaniak.pl/Data/Thumbnails/small_JzHdfOWLa0qnsYQXZum5Aw.pnghttps://dotnetomaniak.pl/FonesBlog-Axum-Agenci-w-akcjiFones.Blog > Axum – Agenci w akcji2010-09-20T21:27:13Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_t1eYCXTLikql7OF4DBu1Eg.png"/></div><div>Axum to kolejny inkubacyjny projekt z Redmond, o którym warto wspomnieć. Model agenta, który przedstawiłem w poprzednim poście, został przez giganta potraktowany całkiem poważnie. Solidna implementacja, skalowalność, wtyczka do Visual Studio - to wszystko daje całkiem duże pole do popisu, ale powoli...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/FonesBlog-Axum-Agenci-w-akcji"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fblog.fones.pl%2fpost%2f2010-09-20%2faxum-agenci-w-akcji%2f" style="border:0px"/></a></div></div>foneshttps://dotnetomaniak.pl/Users/Z4K4xbu-30eW2nzgBBBloQ2010-09-21T07:19:57Zhttps://dotnetomaniak.pl/FonesBlog-Axum-Agenci-w-akcji1200Axum to kolejny inkubacyjny projekt z Redmond, o którym warto wspomnieć. Model agenta, który przedstawiłem w poprzednim poście, został przez giganta potraktowany całkiem poważnie. Solidna implementacja, skalowalność, wtyczka do Visual Studio - to wszystko daje całkiem duże pole do popisu, ale powoli...http://blog.fones.pl/post/2010-09-20/axum-agenci-w-akcji/http://dotnetomaniak.pl/Data/Thumbnails/small_t1eYCXTLikql7OF4DBu1Eg.pnghttps://dotnetomaniak.pl/FonesBlog-Agent-z-wiadomo%C5%9Bci%C4%85Fones.Blog > Agent z wiadomością2010-07-23T11:26:09Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_c0vsGjSsvES3cgeTA0n72g.png"/></div><div>Z implementacją równoległych zadań można sobie poradzić na wiele różnych sposobów. Zazwyczaj jednak instalujemy blokady, monitory, tworzymy transakcje, oplatamy synchroniczny kod. Co by się jednak stało, gdyby całe takie podejście odwrócić do góry nogami? Takich przełomowych projektów było wiele, oferowały nowy model pisania równoległych aplikacji, bez pamięci wspólnej i z wymianą komunikatów. W dzisiejszym wpisie chciałbym przedstawić Wam Model Agenta.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/FonesBlog-Agent-z-wiadomo%C5%9Bci%C4%85"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fblog.fones.pl%2fpost%2f2010-07-23%2fagent-z-wiadomoscia%2f" style="border:0px"/></a></div></div>foneshttps://dotnetomaniak.pl/Users/Z4K4xbu-30eW2nzgBBBloQ2010-08-02T09:57:35Zhttps://dotnetomaniak.pl/FonesBlog-Agent-z-wiadomo%C5%9Bci%C4%851670Z implementacją równoległych zadań można sobie poradzić na wiele różnych sposobów. Zazwyczaj jednak instalujemy blokady, monitory, tworzymy transakcje, oplatamy synchroniczny kod. Co by się jednak stało, gdyby całe takie podejście odwrócić do góry nogami? Takich przełomowych projektów było wiele, oferowały nowy model pisania równoległych aplikacji, bez pamięci wspólnej i z wymianą komunikatów. W dzisiejszym wpisie chciałbym przedstawić Wam Model Agenta.http://blog.fones.pl/post/2010-07-23/agent-z-wiadomoscia/http://dotnetomaniak.pl/Data/Thumbnails/small_c0vsGjSsvES3cgeTA0n72g.pnghttps://dotnetomaniak.pl/FonesBlog-Pami%C4%99%C4%87-Transakcyjna-Istniej%C4%85ce-implementacje-cz2Fones.Blog > Pamięć Transakcyjna – Istniejące implementacje – cz.22010-07-21T15:43:22Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_IlaMTLd340yX5muq4Jbekw.png"/></div><div>W poprzednim poście przedstawiłem Wam kilka istniejących implementacji STM, teraz, chciałbym dopełnić tą listę o kilka, równie ważnych, rozwiązań.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/FonesBlog-Pami%C4%99%C4%87-Transakcyjna-Istniej%C4%85ce-implementacje-cz2"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fblog.fones.pl%2fpost%2f2010-07-21%2fpamiec-transakcyjna-istniejace-implementacje-cz2%2f" style="border:0px"/></a></div></div>foneshttps://dotnetomaniak.pl/Users/Z4K4xbu-30eW2nzgBBBloQ2010-07-30T16:28:04Zhttps://dotnetomaniak.pl/FonesBlog-Pami%C4%99%C4%87-Transakcyjna-Istniej%C4%85ce-implementacje-cz21440W poprzednim poście przedstawiłem Wam kilka istniejących implementacji STM, teraz, chciałbym dopełnić tą listę o kilka, równie ważnych, rozwiązań.http://blog.fones.pl/post/2010-07-21/pamiec-transakcyjna-istniejace-implementacje-cz2/http://dotnetomaniak.pl/Data/Thumbnails/small_IlaMTLd340yX5muq4Jbekw.pnghttps://dotnetomaniak.pl/70-503-Synchronization-Eastgrouppl70-503: Synchronization | Eastgroup.pl2010-05-25T07:52:30Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_RsStzbBks0moO84vcVbXBQ.png"/></div><div>Ten artykuł pochodzi z serii przygotowań do egzaminu 70-503: Windows Communication Foundation.
Ci z Was, którzy obsługiwali już wątki w .NET wiedzą, że nie jest to specjalnie skomplikowane. Najczęściej problemy występują przy obsłudze kontrolek Windows Forms, ponieważ ich właściwości mogą być zmieniane tylko w wątku, który je stworzył. Innym problemem jest wykorzystywanie lokalnej pamięci wątków do przechowywania informacji o kontekście, gdy proces nieoczekiwanie zmienia wątki, te dane mogą zniknąć. Z tej ...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/70-503-Synchronization-Eastgrouppl"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2feastgroup.pl%2fpost%2f70-503-Synchronization.aspx" style="border:0px"/></a></div></div>danielplawgohttps://dotnetomaniak.pl/Users/2gpSr8DDgU2Y9-iey0Z9mw2010-06-04T05:50:12Zhttps://dotnetomaniak.pl/70-503-Synchronization-Eastgrouppl3710Ten artykuł pochodzi z serii przygotowań do egzaminu 70-503: Windows Communication Foundation.
Ci z Was, którzy obsługiwali już wątki w .NET wiedzą, że nie jest to specjalnie skomplikowane. Najczęściej problemy występują przy obsłudze kontrolek Windows Forms, ponieważ ich właściwości mogą być zmieniane tylko w wątku, który je stworzył. Innym problemem jest wykorzystywanie lokalnej pamięci wątków do przechowywania informacji o kontekście, gdy proces nieoczekiwanie zmienia wątki, te dane mogą zniknąć. Z tej ...http://eastgroup.pl/post/70-503-Synchronization.aspxhttp://dotnetomaniak.pl/Data/Thumbnails/small_RsStzbBks0moO84vcVbXBQ.pnghttps://dotnetomaniak.pl/NET-C-programowanie-Blog-Micha%C5%82a-Komorowskiego-Czemu-nale%C5%BCy-u%C5%BCywa%C4%87-w%C5%82a%C5%9Bciwo%C5%9Bci-SyncRoot.NET C# programowanie - Blog Michała Komorowskiego: Czemu należy używać właściwości SyncRoot?2009-07-22T11:17:22Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_h1TmPneClEmnZGazs9gwgg.png"/></div><div>SyncRoot to właściwość zdefiniowana na poziomie interfejsu ICollection służąca do synchronizowania operacji wykonywanych na kolekcjach przy pomocy słowa kluczowego lock lub jawnie przy pomocy monitora. Czemu jednak należy używać tej właściwości zamiast instancji kolekcji, czyli czemu zalecany jest taki kod:
Kiedy postawiłem sobie to pytanie okazało się, że odpowiedź nie jest dla mnie oczywista. Wizyta w dokumentacji MSDN nic nie pomogł...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/NET-C-programowanie-Blog-Micha%C5%82a-Komorowskiego-Czemu-nale%C5%BCy-u%C5%BCywa%C4%87-w%C5%82a%C5%9Bciwo%C5%9Bci-SyncRoot"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fmichalkomorowski.blogspot.com%2f2009%2f07%2fczemu-nalezy-uzywac-wasciwosci-syncroot.html" style="border:0px"/></a></div></div>Paweł Łukasikhttps://dotnetomaniak.pl/Users/lI7X-wDfeE2RoUfuiihoOg2009-07-30T20:00:20Zhttps://dotnetomaniak.pl/NET-C-programowanie-Blog-Micha%C5%82a-Komorowskiego-Czemu-nale%C5%BCy-u%C5%BCywa%C4%87-w%C5%82a%C5%9Bciwo%C5%9Bci-SyncRoot3680SyncRoot to właściwość zdefiniowana na poziomie interfejsu ICollection służąca do synchronizowania operacji wykonywanych na kolekcjach przy pomocy słowa kluczowego lock lub jawnie przy pomocy monitora. Czemu jednak należy używać tej właściwości zamiast instancji kolekcji, czyli czemu zalecany jest taki kod:
Kiedy postawiłem sobie to pytanie okazało się, że odpowiedź nie jest dla mnie oczywista. Wizyta w dokumentacji MSDN nic nie pomogł...http://michalkomorowski.blogspot.com/2009/07/czemu-nalezy-uzywac-wasciwosci-syncroot.htmlhttp://dotnetomaniak.pl/Data/Thumbnails/small_h1TmPneClEmnZGazs9gwgg.pnghttps://dotnetomaniak.pl/Prymitywy-synchronizacyjne-jak-dobrze-je-znamyPrymitywy synchronizacyjne - jak dobrze je znamy?2009-03-13T07:54:22Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_R49vtXk1pU67iZYIzYdRJA.png"/></div><div>Trochę informacji o tym jak możemy synchronizować procesy i wątki w .NET.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Prymitywy-synchronizacyjne-jak-dobrze-je-znamy"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fmichalkomorowski.blogspot.com%2f2009%2f03%2fprymitywy-synchronizacyjne.html" style="border:0px"/></a></div></div>Paweł Łukasikhttps://dotnetomaniak.pl/Users/lI7X-wDfeE2RoUfuiihoOg2009-03-20T06:05:27Zhttps://dotnetomaniak.pl/Prymitywy-synchronizacyjne-jak-dobrze-je-znamy1870Trochę informacji o tym jak możemy synchronizować procesy i wątki w .NET.http://michalkomorowski.blogspot.com/2009/03/prymitywy-synchronizacyjne.htmlhttp://dotnetomaniak.pl/Data/Thumbnails/small_R49vtXk1pU67iZYIzYdRJA.png