私はこのような出力のcointainer有する:複数のスレッド
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);
}
};
を考えは、それぞれ動的にサイズワークロードに作業しない特定の順序でデータを出力し、私は多くのスレッドを有することですその容器に入れる。スレッドはサーバーアクセスによってトリガーされ、同時にどれくらいの数が出ているか、どれくらい貢献するかは分かりません。
これは、理論的には使用可能なバッファの分布のみを同期させる必要があるため、スレッドがその後に衝突してはならないため、メインワークロードはミューテックスロック外にあるからですビット。
これまではうまくいきましたが、これまでの経験から、スレッディングの問題が発生する可能性があるので、これはスレッドセーフな方法と考えられますか?
このバッファから何かが読み込まれますか?バッファがいっぱいになるとどうなりますか? –
唯一の共有メモリは保護されている 'offset'なので、デストラクタでデータを削除する必要はありません。 –
必要なのは、正しく実装され、スレッドセーフ*キュー*です。 – EJP