是Perforce';s C++;P4API线程安全? 简单的问题——C++线程API是由线程安全提供的吗?文件中没有提到这一点

是Perforce';s C++;P4API线程安全? 简单的问题——C++线程API是由线程安全提供的吗?文件中没有提到这一点,c++,perforce,C++,Perforce,“线程安全”指的是来自客户端的服务器请求。显然,如果我有多个线程试图在同一个连接上设置客户机名称等,就会出现问题 但是给定一个连接对象,我可以让多个线程获取变更列表、获取状态、通过p4映射翻译文件等吗?如果文档中没有提到它,那么它是不安全的 在任何意义上保证线程安全通常都是困难的,并且可能由于添加了锁而导致性能下降。经历了这些麻烦,然后在文档中不提及是没有意义的。回答晚了,但是。。。他们自己: 已知的限制 客户端对象似乎没有线程关联,因此为了在线程之间共享连接,只需使用互斥来序列化调用。这是一个

“线程安全”指的是来自客户端的服务器请求。显然,如果我有多个线程试图在同一个连接上设置客户机名称等,就会出现问题


但是给定一个连接对象,我可以让多个线程获取变更列表、获取状态、通过p4映射翻译文件等吗?

如果文档中没有提到它,那么它是不安全的


在任何意义上保证线程安全通常都是困难的,并且可能由于添加了锁而导致性能下降。经历了这些麻烦,然后在文档中不提及是没有意义的。

回答晚了,但是。。。他们自己:

已知的限制


客户端对象似乎没有线程关联,因此为了在线程之间共享连接,只需使用互斥来序列化调用。

这是一个很好的观点。尽管在性能方面,考虑到执行任何查询的巨大成本都是服务器响应和网络传输时间,我认为API将尽可能安全。不过,如果他们没有提到,最好假设它不安全,正如您所说。顺便说一句,我的商店的Performce管理员建议我们在需要时建立一个新连接,而不是保持同一个连接打开并在线程之间重复使用:打开的连接会消耗实例上的PID和其他资源。
      The Perforce client-server protocol is not designed to support
      multiple concurrent queries over the same connection. For this
      reason, multi-threaded applications using the C++ API or the
      derived APIs (P4API.NET, P4Perl, etc.) should ensure that a
      separate connection is used for each thread or that only one
      thread may use a shared connection at a time.