我有一个使用Q_GLOBAL_STATIC
包含必须从多个线程访问的数据结构的单例类实现,我在类中实现了访问器函数,它将在访问数据之前锁定互斥锁,以便对共享数据的所有访问都被序列化。
问题是我想QAbstractTableModel
在data()
. 但我认为这还不够,因为在对另一个线程的两个后续调用之间可能会跳入并更改项目的数量,例如 ( ),并且模型的线程最终可能会访问越界数据。columnCount()
rowCount()
data()
rowCount()
columnCount()
我想我需要在模型重置的第一次调用和模型重置之前锁定互斥锁rowCount()
,并且只有在将所有数据读入模型时(在最后一次调用之后data()
)才解锁它,有没有办法这样做?还是我想错了?
我想在模型重置时将共享数据结构复制到本地数据结构(并且仅在复制操作上锁定互斥锁),然后安全地访问复制的数据,但这不是矫枉过正吗?没有更有效的解决方案吗?