【发布时间】:2013-05-28 15:04:31
【问题描述】:
我正在为单线程应用程序(具有非线程安全 API)开发多线程插件。
我当前的插件有两个线程:主线程是应用程序的线程,另一个用于处理主线程的数据。长话短说,第一个创建对象,给它们一个 ID,将它们插入到地图中,有时甚至访问和删除它们(如果应用程序这么说的话);第二个是从该地图读取数据并更改对象。
我的问题是:我可以使用哪些技术来使我的插件线程安全?
【问题讨论】:
-
是否允许主线程在工作线程处理对象时删除它?
-
我会计算引用来访问单个对象(如果第一个线程没有改变它们)和一个互斥锁来保护地图(插入新项目)。计数引用在插入和第二个线程访问时增加,在删除和第二个线程完成其工作时减少。当计数引用达到 0 时,对象将(自动)删除自己。
-
对于线程职责分离的程序,我喜欢使用非阻塞队列来传达作业和结果
标签: c++ c multithreading concurrency