Jak mówi tytuł: Jak właściwie testować i porównywać różne implementacje muteksów w c ++?
Zasadniczo napisałem własną klasę podobną do std :: mutex dla projektu działającego na 2 rdzeniach, armv7, w celu zminimalizowania kosztów ogólnych w niekwestionowanym przypadku. Teraz rozważam użycie wspomnianego muteksu w większej liczbie miejsc i różnych architektur, ale zanim to zrobię, chciałbym się upewnić
- to jest właściwie poprawne
- nie ma żadnych patologicznych przypadków, w których działałby znacznie gorzej niż standardowy std :: mutex.
Oczywiście napisałem kilka podstawowych testów jednostkowych i mikro-testów i wszystko wydaje się działać, ale w kodzie wielowątkowym „wydaje się działać” nie daje mi wielkiego komfortu.
- Czy istnieją jakieś ustalone techniki analizy statycznej lub dynamicznej?
- Jakie są typowe problemy podczas pisania testów jednostkowych dla klas mutex?
- Jakie są typowe przypadki krawędzi, na które należy zwrócić uwagę (pod względem wydajności)?
Używam tylko standardowych typów bibliotek do implementacji, która obejmuje niespójnie spójne operacje ładowania i przechowywania atomów. Jednak przede wszystkim interesują mnie porady agnostyczne dotyczące implementacji, ponieważ chciałbym używać tej samej wiązki testowej również w innych implementacjach.
Odpowiedzi:
Problem jest złożony:
Niektóre źródła złożoności obejmują:
źródło
Twój pomysł jest bardzo interesujący: test zgodności, na podstawie którego można przetestować wdrożenie mutex.
Niestety, o ile mogłem zobaczyć, nie ma powszechnie znanego testu zgodności dla implementacji mutex. Sądzę więc, że masz w swoich rękach bardzo interesujący problem ze stworzeniem propozycji takiego wzorca zgodności.
A ponieważ jesteś zaangażowany w tworzenie implementacji testu porównawczego, jesteś facetem.
Jeśli pozwolisz mi na sugestię, być może mógłbyś rozpocząć te badania ze standardem POSIX dla wątków z jednej strony i trochę studiowania literatury teoretycznej na temat równoczesnego przetwarzania, takich jak CSP lub Communicating Sequential Processs. Tego rodzaju artykuły zwykle dotyczą klasycznych problemów jednocześnie, takich jak filozofowie kulinarni.
Ich wdrożenie może być interesującą częścią twojego testu zgodności.
źródło