使用pthreads读取关键部分数据

时间:2009-09-21 16:16:44

标签: c multithreading pthreads

我有一个多线程应用程序,我正在使用pthreads和pthread_mutex_lock函数。我需要保护的唯一数据是一个数据结构。如果我只在写入数据结构时应用锁定是否安全?或者我应该在读或写时应用锁?

我发现了一个与此类似的问题,但它是针对Windows的,从那个问题来看,我的答案就是它可以。只是想确定一下。

修改

跟进:所以我想传入命令行参数并从中读取(来自不同的线程)。我还需要使用pthread_mutex_lock吗?

3 个答案:

答案 0 :(得分:4)

您可以使用pthreads_rwlock_t来允许“one-writer OR N-readers”并发。但是如果你坚持使用通用pthread_mutex_lock,就需要获取它所保护的共享数据结构的任何访问权限,所以你要把事情简化为“一个读者或写者”的并发。

答案 1 :(得分:3)

除非您可以保证原子写入(此时甚至不需要锁定写入),否则在读取时必须应用锁定。问题产生于超过1个周期的写入。

想象一下,你写了8个字节作为两个4字节写入。如果另一个线程在写入一半之后开始,则读取将读取无效数据。它的真实情况很少发生这种情况,但是当它发现它是一个很难追查的错误时。

答案 2 :(得分:1)

是的,你需要锁定读取和写入。

编译器和CPU不一定以原子方式写入结构中的字段。此外,您的代码可能无法以原子方式写入,并且结构可能在某些点与其自身不同步。

如果您只需要共享一个整数值,则可以选择使用原子整数。 GCC具有您可以使用的原子属性。这不像使用pthreads锁那样可移植。

相关问题