2011-11-23 60 views
3

假设我在内存中有一个数据结构S. S很复杂,比如树或图。我有两个线程穿过S,他们可能会碰到并尝试同时读取相同的地址。我的问题是:是否有任何在这一点上的隐式锁定的类型,使线程之间的争用产生?如果它是有价值的,我在普通的SMP机器上使用C,pthreads。阅读是否涉及多线程应用程序中的任何锁定?

回答

3

不需要使用只读操作进行锁定。

如果你明确地实现它,只会有锁定。这通常会在另一个线程同时修改(写入)结构的时候完成。

0

如果没有修改,读取总是线程安全的。

0

首先,在C中没有隐式锁定。C是一个“这里是绳索”语言,因为你总是可以自由地挂上自己。

此外,请注意,没有锁定的阅读是安全的,当你是从来没有写作。如果你改变了这些数值,那么读数可能会导致你错误的数值。

最后,两个很酷的工具可帮助您决定在不确定时是否需要锁定DRD和helgrind(valgrind工具)。这两种都是线程工具,可以检测各种线程相关的错误。只要知道他们会在敏感方面犯错。

相关问题