问题
- 我有一个目录
D,我想将(K, V)它们放入 void save(K, V)K将包含内容的文件名保存V到目录D- 具有“即发即弃”的语义 - 函数可能在将文件实际保存到磁盘之前返回
- 目录是定义函数
D的类的字段Csave - 调用
void save(K, V)应该同时运行tbb::task用于并发- 同一密钥的两个文件写入不能同时运行
- 也就是说,如果两个线程同时调用
save(K, V1),save(K, V2)结果应该是Dnamed中的文件,其K内容等于or(但未损坏)V1V2
计划的方法
H选择一个映射K到一个哈希函数std::size_t- 选择一个整数
N > 1 - 给类
C一个互斥体数组tbb::mutex mutex_map[N] void save(K, V)等待获取锁mutex_map[H(K) % N]以执行其文件写入
问题
- 这是一个明智的做法吗?
- 你能想出一个可能比这更有优势的替代方案吗?
- 是否有一些
tbb数据结构已经封装了互斥映射的这个概念?- 想想类似的东西,
std::map<TKey, tbb::mutex>但是界面给出了每个可能的键同时具有关联互斥锁的外观。
- 想想类似的东西,