通常我只使用pthread的互斥锁来保护一个部分,例如一个异步定时绘制函数,它从可以删除对象的列表中选择要绘制的对象。
还有其他选择吗? (libc的原子类型?)
修改
一个更简单的例子,没有列表。
我使用OpenGL的3D模型查看器,绘图功能由计时器调用。 用户可以选择另一个文件用键盘或鼠标查看,但在绘图时从内存中销毁当前模型的数据显然会导致分割。
目前我在draw函数和pthread_mutex_trylock
中使用pthread_mutex_lock
,其中对象被销毁并且新的被加载。
我看到的唯一无锁替代方案是在销毁旧对象之前将新对象加载到内存中,但恕我直言会增加一些开销,我只需要一些lock
unlock
原语(最终一个trylock
)。