Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 坚固的存储库实例是线程安全的吗?_Ruby_Git_Concurrency_Rugged - Fatal编程技术网

Ruby 坚固的存储库实例是线程安全的吗?

Ruby 坚固的存储库实例是线程安全的吗?,ruby,git,concurrency,rugged,Ruby,Git,Concurrency,Rugged,我的问题归结为标题:存储库实例(打算)是线程安全的吗 当我这么做的时候,我也许能够解决一个我已经讨论了很久的问题:当使用不同的存储库实例时,使用坚固的(预期的)线程安全性访问git存储库吗 上下文 我正在使用Racked访问git存储库,该存储库为多个用户存储文档,这些用户可以通过共享web前端访问repo。到目前为止,我为每次访问都创建了一个新的存储库实例,因为它的性能足够好,而且似乎是安全的(我无法在文档中找到保证,也无法从libgit2的使用方式确定明显的安全性,但没有测试发现问题,我假设

我的问题归结为标题:存储库实例(打算)是线程安全的吗

当我这么做的时候,我也许能够解决一个我已经讨论了很久的问题:当使用不同的存储库实例时,使用坚固的(预期的)线程安全性访问git存储库吗

上下文

我正在使用Racked访问git存储库,该存储库为多个用户存储文档,这些用户可以通过共享web前端访问repo。到目前为止,我为每次访问都创建了一个新的存储库实例,因为它的性能足够好,而且似乎是安全的(我无法在文档中找到保证,也无法从libgit2的使用方式确定明显的安全性,但没有测试发现问题,我假设libgit2本身是安全的)

但是,我遇到了一个问题,它限制了您几乎可以同时打开的存储库实例的数量,这给一些脚本带来了问题,这些脚本重用了为每个git存储库访问创建存储库实例的一些代码。一个简单的解决方案是在所有用户之间共享存储库实例。但是,如果存储库实例不是线程安全的,这将导致问题。我是否需要使用互斥锁来保护所有这些共享实例,或者我可以不使用互斥锁,因为racked/libgit2已经为我解决了这个问题?

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


但正如问题的第二部分所指出的,您实际上希望跨不同的线程使用相同的存储库实例。在这里,answe是它取决于。libgit2提供的大部分(但不是全部)函数都应该是线程安全的,但我不能给出一个明确的列表。有关更多信息,请参阅。

谢谢,该问题很好地解释了状态。我想我会用互斥锁序列化对repo的访问。单个操作的速度足够快,用户不会注意到。