В Go версии 1.1 обещают такую клевую штуку как thread-sanitizer. Эта штуковина в автоматическом режиме определяет race conditions в вашей программе. Так как в Go потоки создаются "с легкостью необыкновенной" то и проблема обнаружения таких ошибок стоит весьма остро. Хотя если следовать паттернам проектирования реализованным в самом языке то вероятность наступить на эти грабли минимальна.
Как эта штуковина работает ?
Она патчит компилятор и при любом доступе к памяти, который является потенциально опасным проверяет этот участок памяти - на предмет а не пишет ли кто туда в этот момент ?
Если такие вещи обнаруживается то вам выдается лог с указанием какие именно потоки у вас не поделили данный участок памяти. Более подробно об алгоритме можно прочитать тут - https://code.google.com/p/thread-sanitizer/wiki/Algorithm
Этот инструмент в принципе доступен уже сейчас - для C/C++ и для Go. Но придется самим прикручивать его к компилятору. Самая же хорошая новость - что в Go 1.1 этот инструмент будет доступен сразу в коробке.
Комментариев нет:
Отправить комментарий