在这种情况下,“固定”是啥意思?
Posted
技术标签:
【中文标题】在这种情况下,“固定”是啥意思?【英文标题】:What does "pinned" mean in this case?在这种情况下,“固定”是什么意思? 【发布时间】:2016-01-14 07:38:30 【问题描述】:当我阅读 libevent 的源代码时, 我看到了这条评论,但我不明白“固定”的含义?
/* Make sure that none of the chains we need to copy from is pinned. */
remaining = size - chain->off;
EVUTIL_ASSERT(remaining >= 0);
for (tmp=chain->next; tmp; tmp=tmp->next)
if (CHAIN_PINNED(tmp))
goto done;
if (tmp->off >= (size_t)remaining)
break;
remaining -= tmp->off;
你能给我解释一下吗?
【问题讨论】:
也许CHAIN_PINNED
的定义有一些文档/解释。
不是真的,我得到的最接近的是users.sosdg.org/~qiyong/mxr/source/external/bsd/libevent/dist/…:“使用给定标志固定单个缓冲区链。固定块在取消固定之前可能无法移动或释放。”这是“pin”的常见用法:标记一段数据以保留在内存中。就像“在里面插一个别针,这样它就不能移动了”。
告诉我们CHAIN_PINNED
的定义,也许我们可以帮助你
谢谢^^。那么在这种情况下,如果一个缓冲链被钉住了,当我调用上面这段代码时,我什至不能在钉住的缓冲链中得到一个字节数据,对吧?
【参考方案1】:
在这种情况下固定只是意味着evbuffer_chain
当前正在用于读取或写入。通过查看 CHAIN_PINNED
的定义和 EVBUFFER_MEM_PINNED_ANY
、EVBUFFER_MEM_PINNED_W
和 'EVBUFFER_MEM_PINNED_R' 的定义,您会看到它正在检查 evenbuffer_chain 的标志,以了解它是否正在用于读取或写入,如下所示:
buffer.c:
#define CHAIN_PINNED(ch) (((ch)->flags & EVBUFFER_MEM_PINNED_ANY) != 0)
evbuffer-internal.h:
#define EVBUFFER_MEM_PINNED_R 0x0010
#define EVBUFFER_MEM_PINNED_W 0x0020
#define EVBUFFER_MEM_PINNED_ANY (EVBUFFER_MEM_PINNED_R|EVBUFFER_MEM_PINNED_W)
您可以进一步查看这些标志何时在here in the source for writing 和here in the source for reading 等代码中设置。
【讨论】:
以上是关于在这种情况下,“固定”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
在这种情况下,“状态”是啥意思? (关于在 cookie 中存储 JWT 的讨论)
关于 ReadFile() WinAPI,GetLastError 抛出错误 183。在这种情况下,“ERROR_ALREADY_EXISTS”是啥意思?