Jak pisać Thread-Safe klasy

Jak pisać Thread-Safe klasy
  • Rejestracja: dni
  • Ostatnio: dni
0

Pytanie dla zaawansowanych użytkowników, bo raczej tematyka wielowątkowości do najłatwiejszych nie należy. No właśnie jakich zasad się trzymać, z czego korzystać, jeżeli chcemy zapewnić, żeby nasza klasa była "Thread-Safe" ?

niezdecydowany
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Bieszczady
0

Najprościej(teoretycznie) i chyba najlepiej - niezmienne obiekty - podobno wydajność będzie beee, bo się robi dużo obiektów ale to bzdury, oszczędzasz na konieczności synchronizacji.
Z "technik" to np: thread confinement(google it).

Tak ogólnie - w sumie pisząc z perspektywy javy, ale tutaj to też się chyba sprawdzi - to korzystaj z istniejących narzędzi, nie pisz swoich.

Wizzie
  • Rejestracja: dni
  • Ostatnio: dni
0

Druga opcja to przesyłanie danych, a nie dzielenie pamięci. Przykład to aktorzy z Akki (framework na JVM, ale ma port na .NET).

szogun1987
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Lublin/Gdynia
0

Po pierwsze możesz pisać kod, w którym nie posiadasz zasobów współdzielonych między wątkami. Przykładem takiego rozwiązania może być aplikacja ASP.Net MVC w której zwracasz wynik "Cześć " + wartość pola imię. Jeżeli jesteś w stanie coś tak napisać aplikację to o nic nie musisz się martwić.
Drugi krok korzystanie z bibliotek i softu bezpiecznych wątkowo. Np. jeżeli piszesz CRUD-a z bazą SQL to możesz mieć problemy wynikające pośrednio z wielowątkowości ale będą raczej powtarzalne i możliwe do jakiegoś poprawienia.
Jeżeli musisz współdzielić dane w pamięci (np. cache w pamięci RAM) to obiekty immutable mogą nie być najwydajniejsze dalej dają ci dużą szansę na odtworzenie błędów wynikających z wątków i ich naprawę. Niestety w C# nie są jeszcze za dobrze wspierane (np. wykonanie kopii złożonego obiektu ze zmienioną właściwością nie jest trywialne).
Na sam koniec zostają blokady (zarówno te wykorzystujące Mutex jak i SpinLocki) jest to mechanizm, który na pierwszy rzut oka wydaje się prosty jednak z czasem okazuje się wymagać biegłości.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.