![]() |
1
5
我将用类似的东西来包装longrunningoperationtofectfactor的实现。我使用的是boost-scoped锁,但您可以使用类似于其他锁定框架的锁。
如果这真的是一个长时间运行的操作,那么锁定互斥体的成本应该是最小的。 您的问题并不十分清楚,但是如果函数longrunningoperationtofectfactor是您类的成员函数,那么您希望该映射是同一类中的可变映射。我单一的静态互斥访问仍然足够快。 |
![]() |
2
3
我愿意 不 使此缓存成为本地静态缓存。可变地图是 这个 缓存结果的解决方案。否则,它将使您的函数无用,因为类中的不同对象将共享相同的缓存,因为本地静态缓存对于所有对象都是相同的。但是,如果结果不依赖于对象,则可以使用本地静态。但是如果函数不需要访问对象的任何状态,那么我会问自己为什么它是对象的非静态成员。
正如您所说,它应该是线程安全的——如果不同的线程可以在同一个对象上调用成员函数,那么您可能希望使用互斥体。
|
![]() |
3
1
你可以使用 singleton pattern (1)使用执行长时间运行操作并缓存结果的类。然后可以在其他类的const成员函数中使用此实例。考虑互斥以保护从映射数据结构中插入和提取的线程安全。如果多线程性能是一个巨大的问题,那么可以将密钥标记为正在进行中,以防止多个线程同时计算同一个密钥。
(1)单子模式可能会被严重忽略。所以,如果你第一次看到它,请不要发疯。 |
![]() |
4
0
除非我不明白,我觉得很明显你想把它变成静态的:
这样,你只取一次因子。 |
![]() |
Eric · fgets_unlocked()用于多线程读取不同文件 2 年前 |
![]() |
RoyGNEU · 堆上的专用std::Vector是线程安全的吗? 2 年前 |
![]() |
JaiK · 在c中使用线程或队列写入文件# 6 年前 |
![]() |
Catalin Ghita · 如何以安全线程对象为值初始化哈希表? 6 年前 |
![]() |
Juan JuezSarmiento · C++删除对象,是否锁定? 6 年前 |
![]() |
Missa · 两个不同线程正在处理原子NSMutableArray 6 年前 |
|
user5682282 · 从其他线程读取值 6 年前 |