Pisze pewien serwer do gry i okazało się , że muszę korzystać z mutexów przy każdej czynności bo później wątki się blokują. I mam pytanie . Czy używać zwykłego std::mutex - lock() , unlock() . Czy std::mutex<unique_lock> lub std::mutex<lock_guard> . Co jest wydajniejsze i lepsze do użycia ?
Coś Ci się pomieszało, std::mutex nie jest kontenerem, lock_guard i unique_guard są. Lock guard z tego co pamiętam to zwykły scope lock. Na unique lock możesz zawołać lock i unlock, oraz możesz stworzyć mutexa bez blokowania z zachowaniem RAII.
Inna sprawa, jeśli musisz tworzyć mutexy przy każdej czynności to znaczy, że coś jest nie tak z Twoim serwerem. Bezmyślne mutexy łatwo mogą zamienić Twój wielowątkowy serwer w de-facto jednowątkowy serwer.
Źle to powiedziałem . Może nie przy każdej czynności . Ale gdy muszę wyciągnąć wartośc. z bazy danych , wysłać pakiety . A no tak pomieszało mi się bo powinno być std::unique_lock , std::lock_guard a nie std::mutex.
Nie da się edytować...
Głównie chodzi o to , że muszę używać mutexów dlatego ,że gdy dwa clienty zrobią to samo czyli np. Wybiorą postać to później wątki się blokują i jest czarny ekran . A gdy np jest jeden wątek to wszystko działa idealnie.
Wybór postaci powinien dać się zrobić bez muteksów. Można to zrobić po stronie klienta, potem przesłać wynik wyboru do serwera, który zachowa tą informację w miejscu przeznaczonym dla tego klienta i do którego nie ma dostępu inny wątek.
ps. Jako anonim nie możesz edytować swoich postów.
Jak dla mnie ten wątek powinien trafić do perełek ; DDD
Pierwszy raz się za to zabieram więc nie ma co się śmiać.