Libssh2:在"每个线程的通道"基础上在线程之间共享 ssh 会话是否安全?
Libssh2: Is safe to share ssh session between threads on "channel per thread" basis?
假设我建立了ssh连接,然后使用libssh2_channel_open_session()
创建了多个通道 - 所有这些都在一个主线程中。
然后我为每个通道创建一个线程,这些线程开始从它们的通道写入和读取。每个线程仅使用其LIBSSH2_CHANNEL*
指针,从不访问会话句柄 (LIBSSH2_SESSION*
(。
然后主线程加入所有线程并关闭会话。
这安全吗?我在 LibSSH2 文档中发现的唯一关于线程安全的是"只是不要同时共享句柄"。但是,我不明白这如何适用于我的情况。我不直接共享句柄,但通道句柄可能会共享会话句柄。
不,由于您提到的原因,这不是线程安全的:通道共享会话句柄。此外,通道通过会话的单个 TCP 连接进行多路复用,因此在非阻塞上下文中,在开始对另一个通道的操作之前完成通道上的操作非常重要。
如果您计划从多个线程使用会话(通道、sftp 等(的任何句柄,则可能需要使用互斥锁保护会话。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- Libssh2:在"每个线程的通道"基础上在线程之间共享 ssh 会话是否安全?
- Boost-在多个会话中对多个进程进行线程处理
- 提升线程链接在 Netbeans 7.1 调试/测试会话中失败