gpt4 book ai didi

c++ - 多个线程同时写入单个缓冲区

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:06 24 4
gpt4 key购买 nike

我有一个类似这样的输出硬币容器:

struct cont {
std::mutex m;
size_t offset;
char* data;

cont(size_t sizeB) {
data = new char[sizeB];
}

void write(char* data, size_t sizeB) {
m.lock();
size_t off = offset;
offset += sizeB;
m.unlock();
std::memcpy(this->data + off, data, sizeB);
}
};

我的想法是我有很多线程,每个线程都处理一个动态大小的工作负载,并以没有特定顺序的方式将数据输出到该容器中。这些线程是由服务器访问触发的,并且不知道有多少线程同时在运行或者它们将贡献多少。

我对此提出质疑的原因是,如您所见,主要工作负载在互斥锁之外,因为理论上,只有可用缓冲区的分配需要同步,线程不应在该位之后发生冲突.

它到目前为止工作正常,但根据以前的经验,线程问题可能会在以后的过程中自行显现,所以这被认为是线程安全的做法吗?

最佳答案

看起来不错。如果你想优化,你可以使偏移原子化,以完全避免互斥锁。所以,只需声明

std::atomic<size_t> offset;

并且可以删除互斥量。

关于c++ - 多个线程同时写入单个缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914443/

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