"选择必须与所有消费者保持一致"是什么意思?

Kev*_*vin 7 c python python-3.x

我正在实现Python C扩展,我希望我的自定义对象支持缓冲协议.缓冲区协议实质上允许容器对象以受控且明确定义的方式将原始指针暴露给它们的内存.消费者传递了许多标志,指示它准备处理什么样的内存,导出器返回描述内存的结构.

我对PyBUF_WRITABLE国旗特别感兴趣:

PyBUF_WRITABLE

控制只读字段.如果设置,导出器必须提供可写缓冲区或报告失败.否则,导出器可以提供只读或可写缓冲区,但选择必须对所有消费者都是一致的.

我的对象是可观察的,但这自然与将可写指针分配到原始内存相冲突,所以如果我有任何活动的观察者,我只能发出只读缓冲区,如果我有任何活动的可写缓冲区,我无法注册任何观察员.

我想默认发出只读缓冲区,并且只在被问到时才提供可写缓冲区,但我不确定这是否合法.我可以看到这句话有两种可能的解释:

  1. 所有没有通过旗帜的消费者应该收到同样的东西.为这些消费者提供只读缓冲区并给予传递标志可写缓冲区的消费者是合法的.
  2. 无论是否通过旗帜,所有消费者都应该收到相同的东西.如果可以返回可写缓冲区,则必须在每种情况下返回可写缓冲区.如果无法提供可写缓冲区,则标志的唯一目的是抛出错误.

哪种解释是正确的?

小智 1

重要的部分是:

否则,导出器可以提供只读或可写缓冲区,但选择必须一致

选择..这个选择,因为第一种情况是没有选择...必须是你为每个消费者做出的一致,而不是东西。

如果设置了该字段,则必须提供可写缓冲区。别无选择,因为无论出于何种原因,技术上无法做到这一点都是别无选择。如果未设置,它仍然是可写的,但是对于所有未设置该标志的人来说,它必须是可写的。