iocp - 在windows的多线程中使用IOCP时如何确保线程安全?
问题描述
如果我 CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 4),那么当调用 PostQueuedCompletionStatus() 时,运行 GetQueuedCompletionStatus() 的 4 个线程可能会从 GetQueuedCompletionStatus() 返回。所以如果我想通过 PostQueuedCompletionStatus() 多次发送一些数据,那么 4 个线程将有机会发送数据。那么问题是,多线程中将使用相同的套接字。它会是线程安全的吗?作为同一个套接字,我可以一直指定到同一个线程吗?
解决方案
在我看来,而不是从属套接字和线程。能够在单个套接字上只运行一次 WSARecv 或 WSASend 似乎很重要。您将能够使用 _interlocked 函数使用标志变量来控制接收和发送请求。
推荐阅读
- r - 如何通过在 R 中重复其值来扩展向量以匹配另一个向量?
- javascript - 使用 webpack 响应延迟加载模块
- ruby-on-rails - 使用 react 和 json 将图像上传到 rails
- python - 如何在 `setup.py` 中设置 bin 脚本入口点?
- typo3 - TYPO3:在插件 tx_seo 中修改站点地图的根页面
- sql - C# 是否有一个匹配 SQL 对象类型的枚举?
- php - Laravel PDF - 从多种语言渲染文本
- android - 向下滑动视图在第一次后不再显示
- sql - Marketing Cloud中如何计算一段时间内的唯一打开数?
- flutter - Flutter 错误 - 无法使上下文成为当前的以获取帧