W dzisiejszym poście przedstawię zasadę działania semafora oraz mutexa. Zacznijmy od teorii, czym jest semafor i jak można go zaimplementować? Otóż semafor jest sposobem na realizację wzajemnego wykluczania – zapewnienia, że tylko określona liczba wątków będzie mogła jednocześnie wykonać dany fragment kodu. Wyróżniamy semafory binarne, które dopuszczają maksymalnie jeden wątek oraz semafory ogólne, które umożliwiają jednoczesny dostęp określoną przez programistę liczbę wątków. Implementacja semafora wym...
W celu synchronizacji wątków można wykorzystać mechanizm zdarzeń: ManualResetEvent oraz AutoResetEvent. Rozwiązanie polega na zastosowaniu sygnalizacji. Chcąc wejść do sekcji krytycznej piszemy:ManualResetEvent resetEvent =new ManualResetEvent(false); resetEvent.WaitOne(); W konstruktorze ustawiamy początkową wartość sygnału na false(brak sygnału). Następnie wywołujemy metodę WaitOne, która czeka na nadejście sygnału. Metoda blokuje kod aż do momentu gdy w jakimś miejscu kodu zostanie wysłane zdarzenie...
W ubiegłym tygodniu w implementowanym systemie zajmowałem się datą i czasem. I tak mnie tknęło... dlaczego w ogromnej większości systemów, które przyszło mi oglądać, datę zapisuje się w sposób następujący? 1: article.PublishedTime = DateTime.Now Niby co jest z tym złego? Właściwie... to zależy od kontekstu i rodzaju tworzonego systemu. Korzystając z powyższej konstrukcji trzeba zdawać sobie sprawę z tego, że tak zapisany czas jest ZALEŻNY od maszyny, na której operacja ma miejsce. Wartość ta odczytana...
Najtrudniejszym zadaniem w programowaniu współbieżnym jest programowanie sekwencyjne a uściślając synchronizacja wątków;). Pewne operacje w naszych programach muszą być wykonywane w sposób sekwencyjny. Często dostęp do danych współdzielonych nie może odbywać się w sposób równoległy. Rozważmy klasyczny problem zwiększania liczby o jeden:counter = counter +1; Jeśli zmienna counter jest współdzielona przez kilka wątków, powyższa operacja jest niepoprawna. Dlaczego? Zacznijmy od początku. Zwiększanie lic...
Wydawałoby się, że ostatnio temat XNA, nieco ucichł i nie pojawiają się jakieś kluczowe informacje związane z tym frameworkiem. Gdyby jednak podsumować co już wiadomo, na temat tego, co pojawi się w związku z kolejnymi wersjami, uzbierałoby się tego całkiem sporo.Surface Cieszy fakt, iż Microsoft wraz z wprowadzeniem kolejnych platform sprzętowych, planuje wprowadzić natywną obsługę XNA przez te urządzenia. Chodzi tutaj konkretnie, o już dost...
Oryginalny post: Your Favorite NP-Complete Cheat Autor: Jeff Atwood Czy kiedykolwiek słyszałeś, żeby inżynier oprogramowania odnosił się do jakiegoś problemu mianem "NP-zupełny"? To wymyślny, żargonowy skrót do "niesamowicie trudny". Najbardziej znana cecha problemów NP-zupełnych to to, że nieznany jest sposób na ich szybkie rozwiązanie; to oznacza, że czas jaki jest wymagany na rozwiązanie danego problemu przy użyciu obecnie znanych algorytmów, wzrasta bardzo szybko w miarę wzrostu rozmiaru ...
Tę serię przede wszystkim należy zacząć od pytania – po co nam to? To z kolei możemy rozbić na dwa kolejne. Po co nam w ogóle programowanie równoległe oraz po co nam TPL – przecież już mamy dostępne narzędzia.Po co nam to w ogóle Mam nadzieję, iż tak na prawdę na to pytanie odpowiadać nie trzeba, ale dla porządku zróbmy to. Potrzebujemy bo prawo Moore’a przestaje działać. Nie możemy już powiedzieć naszemu klientowi, który narzeka na słabą wydajność aplikacji, że gdy będziemy wydawać to oprogramowanie to...
W C++ nie ma mechanizmu typu garbage collector, więc jedyne automatyczne zwalnianie obiektów, jakie w tym języku występuje, dotyczy tych lokalnych - tworzonych na stosie. Dlatego wszelkiego typu pomocnicze obiekty (np. uchwyty do zewnętrznych zasobów, jak pliki) deklaruje się tu zwykle jako właśnie zmienne lokalne. W innych językach z kolei - dokładniej: w tych, w których GC występuje - praktycznie wszystkie...
Oryginalny post: Why testers? Autor: Joel Spolsky Moja siostra sprawiła swoim dzieciom szczeniaczka i one próbowały go wytresować. Aby mieszkać z psem pod jednym dachem, musisz nauczyć go, by nie skakał na ludzi, nie robił kupy w domu, siadał na zawołanie oraz nigdy, przenigdy nie przeżuwał iPada. Nigdy. Dobra dziewczynka. Z tresowaniem psów jest tak, że reakcja musi być natychmiastowa. Jeśli po powrocie do domu odkrywasz, że parę godzin wcześniej pies wywalił kubeł ze śmieciami w kuchni, jest już z...
Dawno już nie pisałem na blogu. Nie chcę tłumaczyć się, że zarobiony jestem i nie mam na nic czasu (choć tak jest :)) wiec postanowiłem zamiast tego wyznaczyć sobie temat, o którym będę pisał i starać się pisać przynajmniej raz w tygodniu. Dzięki temu stworzę kurs jak w przypadku WPF oraz będę dość regularnie pojawiały się nowe wpisy na blogu.O czym więc będzie kurs? Task Parallel Library (TPL) – bo o tym chcę rozpocząć nowy cykl postów to nowe podejście do programowania równoległego, które pojawiło się ...
Zespół Microsoft Learning za pośrednictwem bloga Beta Exam Announcements poinformował o rychłym udostepnieniu egzaminów beta z zakresu Microsoft Visual Studio 2010 oraz Microsoft® .NET Framework 4.
W języku C# mamy kilka mechanizmów tworzenia wątków. Różnią się one zarówno wydajnością jak i przeznaczeniem. Zacznijmy więc od najpopularniejszego sposobu a mianowicie klasy System.Threading.Thread. Stworzenie wątku polega na inicjalizacji klasy oraz wywołania metody Start:publicclass ThreadExample { public CreateThread() { System.Threading.Thread thread =new System.Threading.Thread(ThreadMethod); thread.Start(null); } privatevoid ThreadMethod(object parameters) { ...
Oryginalny post: Elegance Autor: Joel Spolsky Alain de Botton w swojej książce The Architecture of Happiness (wyd. Pantheon Books, 2006) zawarł sekcję dotyczącą elegancji, która każdemu projektantowi oprogramowania wyda się znajoma. Porównuje on most Salginatobel w Szwajcarii... ... z mostem Clifton Suspension w Anglii: ... w jednej z najbardziej niesamowitych książek o architekturze jakie kiedykolwiek przeczytałem:Obydwa mosty – Salginatobel, Roberta Maillarta oraz Clifton Suspension, Isambarda Brunel...
Bruce Eckel zręcznie identyfikuje źródło wszystkich problemów związanych z tworzeniem oprogramowania: Pracujemy w młodej branży. W zasadzie to prymitywnej -- nie wiemy za bardzo co działa i wydaje nam się, że znaleźliśmy prosty sposób, który rozwiązuje wszystkie problemy. W rezultacie przechodzimy przez wieloletnie okresy wzlotów i upadków, w miarę jak nowe pomysły się pojawiają, startujemy, wyczerpujemy możliw...
Oryginalny post: How To Achieve Ultimate Blog Success In One Easy Step Autor: Jeff Atwood Zawsze szturchaj. Zawsze dostarczaj. Zawsze strzelaj. To ta sama rada wyrażona w różnych formach dla różnych odbiorców. Według mojej teorii, pozyskiwanie potencjalnych klientów wywodzi się z rankingu Google, a najlepszym sposobem na zwiększenie tego rankingu jest postępowanie jak zawodowy wojownik: ani uderzenia, ani sierpowe nie wystarczają. Musisz zawsze szturchać i regularnie uderzać sierpowym. Bloguj nieust...
Mając wartość enuma w postaci napisowej, pobraną na ten przykład z bazy, bardzo łatwo jest z powrotem sparsować ją do właściwego dla aplikacji typu: 1: public enum MyEnum 2: { 3: FirstVal, 4: SecondVal 5: } 6: //... 7: (MyEnum)Enum.Parse(typeof(MyEnum), "FirstVal");
Tym razem w ramach rozwinięcia tematyki integracji SVN z systemem BugNET pokażę trochę bardziej zaawansowane rozwiązanie. Integracja oparta jest o stabilną (nie beta i nie RC) wersję BugNET: 0.7.921. Niestety w tej wersji BugNet nie jest wyposażony w żadne mechanizmy (np. web-serwisy), które mogą zapewnić integrację (zgodnie z zapewnieniami autora BugNet jakieś web-serwisy pozwalające na integrację mają być dodane od wersji 0.8). Ten post proponuje, jaki web-serwis można dodać do BugNet by umożliwić inte...
Od kiedy Maciej Zbrzezny 19 lipca 2009 opublikował post grupujący blogi .NET wiele się zmieniło. Doszły nowe blogi, część nie została wymieniona a część wymarła śmiercią naturalną lub zmieniła swój adres zamieszkania. Przez ten okres większość z nas korzystała albo z linków na starym CodeGuru (aktualnie ich brakuje ) albo korzystała z takich portali jak Dotnetomaniak czy Develway by poznać nowy blog lub zapoznać się z ciekawym postem. Brakowało miejsca w którym nie tylko wszystkie blogi by były zgrupow...
Jestem przekonany, że nad przyciskiem OFF w Windows Vista bardzo ciężko pracował cały zespół projektantów interfejsu, programistów i testerów. Ale tak serio, czy jest to najlepsze rozwiązanie jakie można było otrzymać?
Koniec okresu testowego Windows Azure. Masz kod i nie wiesz jak przedłużyć okres ważności konta? Ten artykuł będzie podzielony na dwie części, pierwsza to informacja o tym, że usługa Windows Azure wychodzi z wersji beta i staje się produktem komercyjnym, a druga część to jak przedłużyć sobie okres ważności konta jeżeli mamy odpowiedni numer GUID (token). 1. Nie ma wątpliwości, konta Windows Azure w wersji testowej zostaną wyłączone.