Piszę bibliotekę obliczeniową w scala. Podobna funkcjonalność grupuje się w natywne pojedyncze obiekty scala zawierające wiele procedur i pewną statycznie przydzieloną pamięć dla O (1) danych czasowych.tworzenie obiektów lokalnych wątku na scala
Podejście to nadaje się do użycia w jednym cyklu. Ale wywoływanie funkcji bibliotecznych z różnych wątków jednocześnie może nadpisywać tymczasowe dane i dawać nieprawidłowe odpowiedzi dla dzwoniących.
Mogę po prostu skopiować tę bibliotekę i napisać wersję bezpieczną dla wątków, przenosząc wszystkie statycznie przydzielone pamięci do funkcji lokalnej. Ale wolę go unikać, definiując zmienne lokalne wątku.
Czy to możliwe w scala?
Należy również zauważyć, że istnieje 'DynamicVariable' programu scala, który jest w zasadzie opakowaniem wokół' InheritableThreadLocal'. Nie zapewnia jednak żadnej opcji dla nieinternetowych mieszkańców wątków. –
@ Régis Jean-Gilles Być może nie jest to ściśle związane z pytaniem OP, ale: wspomniałeś o 'InheritableThreadLocal', wydaje się, że nie łączy się dobrze ze strukturą' Executors' z powodu łączenia. Czy istnieje przypadek użycia dla takich zmiennych, oprócz rzeczy, które są przechowywane w przestarzałym 'new Thread(). Start()'? – idonnie
'DynamicVariable' jest przydatna do implementacji * wzorca zakresu dynamicznego *. Zobacz moją drugą odpowiedź na przykład: http://stackoverflow.com/a/13252952/1632462. Jednak nigdy nie może być używany w kontekście wielowątkowym, gdzie po prostu nie zadziała. –