{"action":"created","issue":{"url":"https://api.github.com/repos/mmaka/ProgZesp/issues/29","repository_url":"https://api.github.com/repos/mmaka/ProgZesp","labels_url":"https://api.github.com/repos/mmaka/ProgZesp/issues/29/labels{/name}","comments_url":"https://api.github.com/repos/mmaka/ProgZesp/issues/29/comments","events_url":"https://api.github.com/repos/mmaka/ProgZesp/issues/29/events","html_url":"https://github.com/mmaka/ProgZesp/issues/29","id":200725633,"number":29,"title":"Błąd podczas rozmieszczania wielowątkowego","user":{"login":"mmaka","id":23047904,"avatar_url":"https://avatars.githubusercontent.com/u/23047904?v=3","gravatar_id":"","url":"https://api.github.com/users/mmaka","html_url":"https://github.com/mmaka","followers_url":"https://api.github.com/users/mmaka/followers","following_url":"https://api.github.com/users/mmaka/following{/other_user}","gists_url":"https://api.github.com/users/mmaka/gists{/gist_id}","starred_url":"https://api.github.com/users/mmaka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mmaka/subscriptions","organizations_url":"https://api.github.com/users/mmaka/orgs","repos_url":"https://api.github.com/users/mmaka/repos","events_url":"https://api.github.com/users/mmaka/events{/privacy}","received_events_url":"https://api.github.com/users/mmaka/received_events","type":"User","site_admin":false},"labels":[{"id":471967427,"url":"https://api.github.com/repos/mmaka/ProgZesp/labels/bug","name":"bug","color":"ee0701","default":true}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2017-01-13T20:40:20Z","updated_at":"2017-01-13T22:15:21Z","closed_at":null,"body":"Błąd dotyczy dodawania wygenerowanych rozmieszczeń do listy. O ile właściwie sprawę rozpoznałem, sytuacja wygląda tak:\r\n\r\ndodawanie do listy nie jest operacją bezpieczną, ponieważ  nie jest to operacja atomowa. Lista, którą używamy nie jest to lista w sensie połączonych wskaźnikami węzłów, tylko tablica z mechanizmem pilnującym czy aktualny rozmiar tablicy jest wystarczający, a jeśli nie to tworzącym nową, większą tablicę i kopiującym elementy z poprzedniej tablicy. \r\n\r\nAby pozbyć się tego problemu możemy wykorzystać przygotowane kolekcje takie jak ConcurrentBag (w przestrzeni nazw System.Collections.Concurrent są również inne klasy niż ConcurrentBag) albo dodawać elementy do listy w zabezpieczonym bloku - najpierw robiona jest synchronizacja, ale trzeba to zaimplementować samodzielnie (nie jest to trudne).\r\n\r\nSynchronizacja jest polecana aby zabezpieczać się przed jednoczesnym czytaniem i modyfikowaniem danych na liście. U nas to nie występuje. Nasz problem dotyczy tego momentu, gdy tablica jest kopiowana (podczas debbugowania widziałem, że to funkcja Copy... zgłasza wyjątek). Więc nie wiem czy to jest to o co nam chodzi. Ale spróbuję, bo to rozwiązanie mniej problematyczne niż przechodzenie na klasę ConcurrentBag.\r\n"},"comment":{"url":"https://api.github.com/repos/mmaka/ProgZesp/issues/comments/272562794","html_url":"https://github.com/mmaka/ProgZesp/issues/29#issuecomment-272562794","issue_url":"https://api.github.com/repos/mmaka/ProgZesp/issues/29","id":272562794,"user":{"login":"mmaka","id":23047904,"avatar_url":"https://avatars.githubusercontent.com/u/23047904?v=3","gravatar_id":"","url":"https://api.github.com/users/mmaka","html_url":"https://github.com/mmaka","followers_url":"https://api.github.com/users/mmaka/followers","following_url":"https://api.github.com/users/mmaka/following{/other_user}","gists_url":"https://api.github.com/users/mmaka/gists{/gist_id}","starred_url":"https://api.github.com/users/mmaka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mmaka/subscriptions","organizations_url":"https://api.github.com/users/mmaka/orgs","repos_url":"https://api.github.com/users/mmaka/repos","events_url":"https://api.github.com/users/mmaka/events{/privacy}","received_events_url":"https://api.github.com/users/mmaka/received_events","type":"User","site_admin":false},"created_at":"2017-01-13T22:15:21Z","updated_at":"2017-01-13T22:15:21Z","body":"Blokada wystarczyła. Rzeczywiście ma to sens: blokada działa aż wszystkie operacje dotyczące dodawania do listy się zakończą (również ewentualne kopiowanie tablicy)."}}
{"actor":{"display_login":"mmaka"}}