Я пытаюсь пересмотреть нашу кодовую базу, которая, кажется, неправильно использует libgit2 (по крайней мере, TSAN сходит с ума от того, как мы ее используем).
Я понимаю, что большинство операций основаны на объектах (иначе, операции поверх репо локализованы для этого репо), но мне неясно, когда речь идет о глобальном состоянии и какие операции необходимо синхронизировать глобально.
Есть ли список функций, которые требуют глобальной синхронизации?
Кроме того, когда дело доходит до git_repository_open()
, нужно ли мне следить за тем, чтобы только один путь удерживался только одним потоком? Т.е. мне нужно запретить нескольким потокам обращаться к одному репо?