我有一个单一类实现使用Q_GLOBAL_STATIC
包含一个数据结构,必须从多个线程访问,我在类中实现访问器函数,这将访问数据,以便所有对共享数据的访问都被序列化。使用QAbstractTableModel中的多个线程之间共享的数据
的问题是,我想在一个QAbstractTableModel
使用这些数据,我可以简单地从我重写data()
,columnCount()
和rowCount()
使用存取功能,我实现并获得一个项目在一个时间。但我认为这是不够的,因为在后续的两个调用data()
之间,另一个线程可能会跳入并更改项目数(例如rowCount()
),并且模型的线程可能最终访问超出界限的数据。
我想我需要的columnCount()
和模型复位rowCount()
最先调用之前锁定的互斥体,和解锁,只有当所有的数据读入模型(以data()
最后一次通话后),有没有这样做的方式?还是我在想错误的方式?
我想拷贝共享数据结构到模型重置的本地一个(并且只有在复制操作时才锁定互斥锁),并且在那之后安全地访问复制的数据,但这不是过度杀伤?没有更有效的解决方案吗?
PS:您仍然可以在几个模型实例之间共享数据,因为所有视图都由主(GUI)线程执行,并且不会同时调用两个模型。 – Jim
感谢您的回答,我想我将不得不切换到单线程设计,以避免这样的问题 – Mike