管道
管道是一个内核对象,它允许一个线程向另一个线程发送一个字节流。管道可用于同步传输全部或部分的数据块。
概念
管道可以配置一个环形缓冲器,其保存已发送但尚未接收的数据;或者,管道可以没有环形缓冲器。
可以定义任意数量的管道(仅受可用RAM的限制)。每个管道都由其内存地址引用。
管道具有以下关键属性:
- size表示管道的环形缓冲区的大小的大小。请注意,大小为0定义了一个没有环形缓冲区的管道。
管道必须初始化才能使用。该管道最初为空的。
数据通过线程同步地以全部或部分的方式发送到管道中。如果不能立即满足指定的最小字节数,则操作要么立即失败,要么尝试发送尽可能多的字节,然后等待,希望以后能够完成发送。已接受的数据可以复制到管道的环缓冲区,或者直接复制到等待的读取器。
数据是由一个线程从一个管道同步接收到的。如果不能立即满足指定的最小字节数,则操作要么立即失败,要么尝试接收尽可能多的字节,然后等待,希望以后能够完成接收。可接受的数据可以从管道的环缓冲区复制,也可以直接从等待的发送者)复制。
数据也可以通过线程从管道中刷新。冲洗既可以在整个管道上进行,也只能在其环形缓冲器上进行。冲洗整个管道相当于读取环形缓冲区中的所有信息,并等待被写入一个巨大的临时缓冲