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

时间:2015-09-12 02:22:47

标签: python c python-3.x

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

我对PyBUF_WRITABLE标志特别感兴趣:

  

PyBUF_WRITABLE

     

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

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

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

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

1 个答案:

答案 0 :(得分:1)

重要的部分是:

  

否则,出口商可能提供只读或可写   缓冲区,但选择必须一致

选择.. 这个选择,因为第一种情况是没有选择...必须与每个消费者保持一致,而不是事物。

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