我正在编写一个应用程序,其中多个链接列表在线程之间共享。链表上的操作与往常一样:搜索,插入,删除,修改节点内容。 我遇到了ann实现,以保持链接列表操作的整个过程“线程安全”。 http://www.cs.cf.ac.uk/Dave/C/node31.html#SECTION003100000000000000000
但是想知道我是否按照以下方式进行:
lock(mutex)
link list operation
unlock(mutex)
即每当我开始操作时,我都会将互斥锁与每个链接列表相关联并按上述方式使用它
感激观点
答案 0 :(得分:1)
取决于。如果您的线程主要搜索列表而不修改它们,那么实现读取器/写入器锁定可能是值得的。只要没有其他线程修改它,就没有理由阻止其他线程读取信息。但是,如果最常见的操作涉及修改列表或其中的信息,则可能没有太大的收获,因此简单的锁定/执行操作/解锁方案也应该起作用。
答案 1 :(得分:1)
可以这样做,但你牺牲活力,因为链接列表现在一次只能被一个线程触及 - 这可能导致列表成为你的瓶颈程序
考虑链表的接口(线程可以调用哪些方法)以及如何保持列表安全,但也允许尽可能多的线程一次使用它。
例如,如果您将列表用作队列,则一个线程可以在列表的尾部排队项目,而另一个线程将项目排队。
创建线程安全实用程序存在许多挑战,但您应该尝试尽可能地进行外科手术,以确保您不会因为首先并行化软件而牺牲性能。玩得开心!