C 什么是;钉住;在这种情况下是什么意思?

C 什么是;钉住;在这种情况下是什么意思?,c,libevent,C,Libevent,当我阅读libevent的源代码时, 我看到了这条评论,但我不明白“钉住”的含义 你能给我解释一下吗?在这种情况下,锁定意味着evbuffer\u链目前正在用于读取或写入。通过查看CHAIN_pinted的定义和EVBUFFER_MEM_pinted_ANY、EVBUFFER_MEM_pinted_W和“EVBUFFER_MEM_pinted_R”的定义,您将看到它正在检查evenbuffer_链的标志,以确定它是否用于读写,如下所示: : : 您可以进一步看到这些标志是何时在代码中设置的,如和

当我阅读libevent的源代码时, 我看到了这条评论,但我不明白“钉住”的含义


你能给我解释一下吗?

在这种情况下,锁定意味着
evbuffer\u链目前正在用于读取或写入。通过查看
CHAIN_pinted
的定义和
EVBUFFER_MEM_pinted_ANY
EVBUFFER_MEM_pinted_W
和“EVBUFFER_MEM_pinted_R”的定义,您将看到它正在检查evenbuffer_链的标志,以确定它是否用于读写,如下所示:

:

:


您可以进一步看到这些标志是何时在代码中设置的,如和。

在本例中,pinted仅表示
evbuffer\u链当前用于读取或写入。通过查看
CHAIN_pinted
的定义和
EVBUFFER_MEM_pinted_ANY
EVBUFFER_MEM_pinted_W
和“EVBUFFER_MEM_pinted_R”的定义,您将看到它正在检查evenbuffer_链的标志,以确定它是否用于读写,如下所示:

:

:


您可以进一步了解这些标志是何时在代码中设置的,如and。

也许
固定链的定义有一些文档/解释。实际上,我得到的最接近的解释是:“使用给定标志固定单个缓冲链。固定块在取消固定之前不能移动或释放。”这是“固定”的常见用法:标记要保留在内存中的数据。如“将插针插入其中,使其无法移动”中所述。向我们展示
CHAIN\u pinted
的定义,也许我们可以帮助您,谢谢您^。所以在这种情况下,如果一个缓冲链被固定,当我调用上面的代码时,我甚至不能在固定的缓冲链中获得一个字节的数据,对吗?也许
chain\u pinted
的定义有一些文档/解释。实际上,我得到的最接近的是:“使用给定标志固定单个缓冲链。固定块在解除固定之前不能移动或释放。”这是“pin”的一个常见用法:标记一段数据以保留在内存中。如“在其中插入一个pin以使其无法移动”“。向我们展示
链的定义
,也许我们可以帮助您。谢谢^。所以在这种情况下,如果一个缓冲链被固定,当我调用上面的代码时,我甚至不能在固定的缓冲链中得到一个字节的数据,对吗?
    /* 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;
}
#define CHAIN_PINNED(ch)  (((ch)->flags & EVBUFFER_MEM_PINNED_ANY) != 0)
#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)