小编And*_*neo的帖子

C ++线程安全对象缓存的设计选项

我正在编写用于C ++中数据缓存的模板库,在该模板库中,可以完成并发读取和并发写入,但不能针对同一键。可以在以下环境中解释该模式:

  1. 高速缓存写入的互斥量。
  2. 缓存中每个键的互斥量。

这样,如果线程从缓存中请求密钥但不存在,则可以为该唯一密钥启动锁定的计算。同时,其他线程可以检索或计算其他密钥的数据,但是试图访问第一个密钥的线程将被锁定等待。

主要约束条件是:

  1. 切勿同时计算键的值。
  2. 可以同时计算2个不同键的值。
  3. 数据检索一定不能锁定其他线程以防止从其他键检索数据。

我的其他约束但已经解决的是:

  1. 固定(在编译时已知)最大缓存大小,并基于MRU(最近使用)打乱。
  2. 通过引用检索(隐式共享计数互斥)

我不确定为每个键使用1个互斥锁是否是实现此目的的正确方法,但我没有发现其他任何本质不同的方法。

您是否知道实现此目标的其他模式?或者您找到合适的解决方案?我不喜欢约有100个互斥锁的想法。(缓存大小约为100个键)

c++ caching thread-safety

5
推荐指数
1
解决办法
2998
查看次数

标签 统计

c++ ×1

caching ×1

thread-safety ×1