2011-06-11 65 views
1

我正在编写一个应用程序,其中多个链接列表在线程之间共享,链接列表上的操作与往常一样:搜索,插入,删除,修改节点内容。安执行,以保持链接列表操作的整个过程“线程安全” http://www.cs.cf.ac.uk/Dave/C/node31.html#SECTION003100000000000000000实现'线程安全的'链表

但不知道是否我卡安做如下:

lock(mutex) 
    link list operation 
unlock(mutex) 

即我一个互斥体,每个链接列表和关联每当我开始操作时都要像上面一样使用它

意见不一致

回答

1

取决于。如果您的线程将主要在列表中搜索而不修改它们,那么实施读取器/写入器锁定可能是值得的。没有理由阻止其他线程读取信息,只要没有一个线程修改它。但是,如果最常见的操作涉及到修改列表或其中的信息,那么可能没有太多好处,所以简单的锁定/执行操作/解锁方案也应该如此。

+0

选择此答案,因为这对我来说比较有用......但其他答案也应该很好地工作 – 2011-06-11 16:25:43

+0

是否有更好的方法来拥有全局锁或在结构本身内定义锁 – Bionix1441 2016-09-20 08:03:11

1

可以这样做,但是你牺牲了活跃度,因为链表现在每次只能被一个线程触及 - 这可能会导致列表成为程序中的瓶颈。

想想链接列表的接口(线程可能会调用哪些方法)以及如何保证列表安全,但也允许尽可能多的线程一次使用它。

例如,如果您将列表作为队列使用,则一个线程可能在列表的尾部列入项目,而另一个线程则列出项目。

在创建线程安全实用程序方面存在很多挑战,但您应该尽可能手术以确保您不会牺牲您试图通过并行处理软件获得的性能!玩的开心!