bee*_*bop 0 multithreading locking atomic
我想知道什么是使数据线程安全的"最佳"方法.
具体来说,我需要跨多个线程保护链表 - 一个线程可能尝试从中读取,而另一个线程从中添加/删除数据,甚至释放整个列表.我一直在读锁; 它们似乎是最常用的方法,但显然它们可能存在问题(死锁).我还读过关于原子操作以及线程局部存储的内容.
在您看来,什么是我最好的行动方案?大多数程序员使用的方法是什么?出于什么原因?
一种没有大量使用但非常合理的方法是指定一个专用线程来拥有每个"共享"结构.该线程通常等待(线程安全;-)队列,例如在Python Queue.Queue实例中,用于工作请求(读取或更改共享结构),包括请求响应的两个(它们将通过自己的队列)当准备好时放置响应)和不放置响应.这种方法完全序列化对共享资源的所有访问,可以轻松地重新映射到多进程或分布式体系结构(几乎无脑,在Python中,带有multiprocessing;-),绝对保证健全性,缺乏死锁以及竞争条件,只要底层队列对象一劳永逸地编程.
它基本上将共享数据结构的地狱变成了消息传递并发体系结构的天堂.
OTOH,它可能比使用lock&c ;-)以艰难的方式阻止它的开销更高.