Libssh2:以“每个线程通道”为基础在线程之间共享ssh会话是否安全?

时间:2019-07-16 16:31:19

标签: c++ multithreading libssh2

假设我建立ssh连接,然后使用queryPurchaseHistoryAsync创建多个通道-全部在一个主线程中。

然后,我为每个通道创建一个线程,然后这些线程开始从其通道进行写入和读取。每个线程仅使用其libssh2_channel_open_session()指针,并且从不访问会话句柄(LIBSSH2_CHANNEL*)。

然后主线程加入所有线程并关闭会话。

这样安全吗?我在LibSSH2文档中发现的关于线程安全的唯一内容是“只是不要同时共享句柄”。但是,我不知道这如何适用于我的情况。我不直接共享句柄,但是通道句柄可能会共享会话句柄。

1 个答案:

答案 0 :(得分:0)

不,由于您提到的原因,这不是线程安全的:通道共享会话句柄。此外,通道在会话的单个 TCP 连接上进行多路复用,因此在非阻塞上下文中,重要的是在另一个通道上的操作开始之前完成一个通道上的操作。

如果您打算使用来自多个线程的会话(通道、sftp 等)的任何句柄,您可能希望使用互斥锁保护会话。