坚固的 Repository 实例是线程安全的吗?

Are rugged Repository instances threadsafe?

我的问题归结为标题:rugged 存储库实例(旨在)是线程安全的吗?

虽然我在做这件事,但我也许能够解决一个我一直困扰的问题:在使用不同的 Repository 实例时,是否可以使用坚固的(预期的)线程安全访问 git 存储库?

上下文

我正在使用 Rugged 访问 git 存储库,该存储库为可以通过共享 Web 前端访问存储库的多个用户存储文档。到目前为止,我为每次访问创建了一个新的 Repository 实例,因为它表现得足够好并且似乎是安全的(我无法在文档中找到 gua运行tees 或从 lib[=26= 的方式确定明显的安全性]2 被使用,但没有测试发现问题,我假设 libgit2 本身是安全的)。

但是,我 运行 进入 issue,这限制了您可以打开的存储库实例的数量 near-simultaneously,这会导致某些重用某些代码的脚本出现问题为每个 git 存储库访问创建存储库实例。一个简单的解决方案是在所有用户之间共享存储库实例。但是,如果存储库实例不是线程安全的,那将导致问题。我是否需要使用 Mutex 来保护所有这些共享实例,或者我可以不用,因为 rugged/libgit2 已经为我解决了这个问题?

是的,libgit2(因此也很坚固)应该是线程安全的,只要不使用相同的存储库实例(或从 libgit2 创建的任何其他对象)跨不同线程。

但是正如问题的第二部分所示,您实际上想要在不同线程中使用相同的存储库实例。在这里,答案是它取决于。大多数(但不是全部)libgit2 提供的函数应该是线程安全的,但我不能给你一个明确的列表。有关详细信息,请参阅 https://github.com/libgit2/libgit2/issues/2491