多线程Linux应用程序中的互斥锁

时间:2011-06-27 16:56:28

标签: c++ linux multithreading unix mutex

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

  • 在数据写入期间需要在写入和读取时锁定变量
  • 在从变量读取数据时,需要将其锁定在写入状态。

因此可以同时阅读,但写作opertion同时是一个单一的操作。在写入期间,所有其他操作应在完成之前等待。

3 个答案:

答案 0 :(得分:3)

你问的是某些东西比互斥量高一点。互斥是一种简单的低级设备。使用互斥锁锁定线程时,CPU要么在获取锁定的线程中执行代码,要么完全执行其他进程。换句话说,互斥锁已锁定属于同一(重量级)进程的所有其他线程。

您正在询问读写锁定。读写锁使用引擎盖下的互斥锁。处理读写锁的POSIX函数以pthread_rwlock_开头。由于您使用的是Linux机器,只需键入man pthread并查找标有“READ / WRITE LOCK ROUTINES”的部分。

答案 1 :(得分:1)

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

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

我不建议你自己实现这个 - 很容易得到看起来有用的东西,但是在负载下崩溃或杀死性能或者(最糟糕的是)以一种它不应该的方式默默地修改你的数据,所以你得到糟糕的结果。

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

答案 2 :(得分:0)

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

相关问题