Uruchomienie funkcji z wątku na rzecz innego obiektu ( wielowątkowy serwer, SFML 2,1 )
Ostatnio zmodyfikowano 2014-09-04 18:50
Monika90 |
» 2014-09-03 22:23:07
auto f = std::bind( & Client::RecevingDataThread, & Core::client, p_message ); |
bind tworzy kopię wskaźnika, jeżeli chcesz go przekazać przez referencję to użyj std::ref , o tak: auto f = std::bind( & Client::RecevingDataThread, & Core::client, std::ref( p_message ) ); ale i tak będziesz miał UB. |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2014-09-03 22:27:56 elegancko, dziękuje, działa ;) btw. co to UB? nie jestem az tak obeznany w nazewnictwie czy skrótach i czy w wypadku tego kodu nadal powinienem synchronizować wątki? |
|
Monika90 |
» 2014-09-03 22:42:38 UB to jest undefined behavior, czyli niezdefiniowane zachowanie. Twój program ma UB z powodu data race, czyli wyścigu do danych. Data race wystepuje wtedy kiedy dwa lub więcej wątków operuje na tej samej zmiennej i co najmniej jedna z tych operacji to zmiana wartości tej zmiennej, dokładnie tak jak u Ciebie. |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2014-09-03 22:45:18 No dobrze... ale czy ten wyścig do danej czymś szkodzi, jak i tak jest ona "monitorowana" w pętlach wykonujących się równolegle? |
|
1aam2am1 |
» 2014-09-03 22:51:28 Mutex |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2014-09-04 18:50:23 " Dlaczego równoczesny dostęp do danej z 2 wątków jest niebezpieczny? - Mutex" brawo odpowiedź. Ja sie nie pytam czego i jak mam użyć do synchronizacji wątków, tylko dlaczego równoczesny dostęp do danej z 2 wątków jest niebezpieczny? - odpowiedź znalazłem, temat zamykam, dziękuje wszsytkim za pomoc |
|
1 2 « 3 » |