假设我建立ssh连接,然后使用queryPurchaseHistoryAsync
创建多个通道-全部在一个主线程中。
然后,我为每个通道创建一个线程,然后这些线程开始从其通道进行写入和读取。每个线程仅使用其libssh2_channel_open_session()
指针,并且从不访问会话句柄(LIBSSH2_CHANNEL*
)。
然后主线程加入所有线程并关闭会话。
这样安全吗?我在LibSSH2文档中发现的关于线程安全的唯一内容是“只是不要同时共享句柄”。但是,我不知道这如何适用于我的情况。我不直接共享句柄,但是通道句柄可能会共享会话句柄。
答案 0 :(得分:0)
不,由于您提到的原因,这不是线程安全的:通道共享会话句柄。此外,通道在会话的单个 TCP 连接上进行多路复用,因此在非阻塞上下文中,重要的是在另一个通道上的操作开始之前完成一个通道上的操作。
如果您打算使用来自多个线程的会话(通道、sftp 等)的任何句柄,您可能希望使用互斥锁保护会话。