2011-06-27 38 views
0

你能帮助我了解如何在多线程的Linux应用程序,其中使用互斥:互斥在多线程的Linux应用程序

  • 数据中写它是需要在写锁变量和数据读取过程中读取
  • 从变量它需要锁定写入。

所以可以同时读取,但写作操作是同一时间的单一操作。在写入过程中,所有其他操作应在其完成之前等待。

回答

3

你在问什么比mutexes更高一些。互斥锁是一个简单的低级设备。当你用一个互斥锁来锁定一个线程时,CPU要么在获得该锁的线程中执行代码,要么正在执行完整的其他进程。换句话说,互斥锁已经锁定了属于同一个(重量级)进程的所有其他线程。

你在问一个读写锁。读写锁在引擎盖下使用互斥锁。处理读写锁的POSIX函数从pthread_rwlock_开始。由于您在Linux机器上,只需键入man pthread并查找标记为“读取/写入锁定程序”的部分。

0

如果您有从不同线程访问(读取和写入)的全局或静态对象,则需要使用互斥锁。

1

您需要一个读写器锁才能允许多个读卡器/单个写入器。

如果您没有其他首选的线程库,Boost.Thread就有其中之一(boost::shared_mutex)。这使用底层的PThreads原语,并且可能会节省您自己封装原始API的时间。

我不会推荐你自己实现 - 很容易得到一些似乎可行的东西,但是在负载下崩溃或杀死性能或者(最糟糕的)以一种不应该的方式默默修改你的数据,所以你得到不好的结果。

在这里也可以使用简单的boost::mutex,如@Als所述,但不允许多个并发读取。这很容易实现,并且可能已满足您的需求,具体取决于您的读/写访问配置文件。