Biblioteka do zarządzania wątkami w C#


#1

Ostatni napisałem biblitekę dll do zarządzania wątkami w c#. Jest ona przeznaczona dla projektów które będą tworzyć dużo wątków (aplikacje serwerowe, gry wykorzystujące wiele wątków), ze względu na priorytyzację kolejki oraz ilość wątków działających zależnych od ilości wątków procesora.

Na stronie projektu dostępne są wszystkie informacje odnośnie używania, licencji itp.
Strona projektu: https://gitlab.com/krakers114/SimpleThreads

Projekt używa C# .NET Framework 2.0 dla kompatybilności z Unity.


#2

id = rnd.Next(0, 10000);
I myślisz, że to ci załatwi unikalność identyfikatorów? :slight_smile:

Poza tym… ja tam nie widzę ‘priorytetów’ wątków. Że niby chodzi o to, że jeśli jakimś cudem będą tam dwa taski czekające na wątek to jeden z nich zostanie obsłużony jako pierwszy? To jest priorytet kolejki a nie wątków :wink: Doczytaj.

Poza tym… ja bym się spodziewał, że tam będzie jakaś pula, ‘zyżyty’ wątek zostanie odłożony do ponownego użytku, a ty za każdym razem tworzysz nowy… Tyle to każdy może sobie samemu zrobić.

Poza tym… to się wysypie :wink:
Twój obiekt klasy BackgroundWorker przegląda ci słownik jobs. W tym czasie inny wątek dodaje do jobs nowe wpisy. Prędzej czy później skończy ci się to wyjątkiem InvalidOperationException.

Mam prośbę, usuń to repo z Gita bo ludziom krzywdę robisz :wink:


#3

Już poprawiłem na GetHashCode().

Błąd w pisaniu opisu. Sorry.

W C# jest to niemożliwe bo wykonaniu pracy wątek kończy pracę (jest to nawet napisane w “Dane wyjściowe” oraz brak odpowiedniego enuma w ThreadState).

Naprawione.

Ciekawe jaką??


#4

Mozliwe: robisz n wątków, kazdy z nich ma petle główna w której wykonuje zadany task. Po jego wykonaniu powiadamia o tym pulę watków lub sam sie wrzuca na liste wątków do ponownego uzycia i czeka na jakimś evencie.

Taką, że dajesz im narzędzie, które oprócz tego, że się wysypie, to nie daje żadnych korzyści.


#5

Samo GetHashCode() również nie gwarantuje tego, że dwa obiekty będą miały inną wartość tej funkcji.

https://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

Two objects that are equal return hash codes that are equal. However, the reverse is not true: equal hash codes do not imply object equality, because different (unequal) objects can have identical hash codes.

Btw. Nie możesz po prostu zrobić funkcji zwracającej kolejny dostępny numer ID?