gpt4 book ai didi

c++ - 是否有生产者消费者以外的设计模式来描述这种模式?

转载 作者:行者123 更新时间:2023-11-28 03:39:01 30 4
gpt4 key购买 nike

在我的 C++ 应用程序中,我使用了 pthreads。我有一个主线程,它将工作分配给另一个线程从磁盘读取,第三个线程写入磁盘。这允许主线程实时执行,而不会因为读取线程保持在主线程消耗之前以及写入线程跟上主线程生产而导致磁盘 io 出现问题。换句话说,读线程产生数据供主线程处理,而写线程消费主线程产生的数据。

在我的应用程序中,我在主线程和读取线程之间共享资源,并且在主线程和写入线程之间有另一组共享资源。在线程间不需要同步的时候,主线程可以自由访问读写线程的共享资源。然后,当它希望提供要读取或写入的工作时,它会设置共享资源以指示所需的工作,然后释放条件变量以通知读取或写入线程(视情况而定)它应该从共享区域。然后它会阻塞自己,直到被请求的线程完成对请求的收集并释放它等待的单独条件变量。这样,正常状态下的主线程访问共享资源,然后在其读线程或写线程需要访问时通过等待条件阻塞自己,而读写线程在正常状态下相反不访问共享资源,但仅在主线程发出信号并等待它们完成访问的同步期间访问。

这是一些非常粗略的伪代码(不要担心这里的确切流程,这只是功能代码的粗略概念):

MainThread:
do {
While (no pending requests) {
manipulate shared resources;
}
if (need write && ready for read requests) {
setup write request in shared resources;
Release condition startWrite variable;
Wait on condition endWrite variable;
}
if (need read && ready for read requests) {
setup read request in shared resources;
Release condition startRead variable;
Wait on condition endRead variable;
}
}
ReadThread:
do {
Notify I am ready for read requests;
Wait on condition startRead;
copy request out of shared resources;
update shared resources to account for reads completed;
Release condition EndRead;
Perform Read from disk;
}
WriteThread:
do {
Notify I am ready for write requests;
Wait on condition startWrite;
copy request out of shared resources;
update shared resources to account for writes completed;
Release condition EndWrite;
Perform write to disk;
}

我的问题是,这是否只是一种正常的生产者消费者设计模式,或者是否有更具体的普遍接受的设计模式来描述我所创建的内容?

最佳答案

您将获得一些独立于主线处理的后台事件来执行输入和输出。可以提前安排读取,以便在需要时数据已经存在,并且可以将写入作为后台事件外包,这样主线就不必阻塞将数据提交到存储。

这种“设计模式”有个名字,叫做“异步IO”。

关于c++ - 是否有生产者消费者以外的设计模式来描述这种模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9933410/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com