多线程Linux应用程序中的互斥
Mutexes in multithread Linux application
你能帮助我了解如何在多线程Linux应用程序中使用互斥吗,其中:
- 在数据写入过程中,需要在写入和读取时锁定变量
- 在从变量读取数据期间,需要在写入时将其锁定
因此,可以同时读取,但写入操作是同一时间内的单个操作。在写入过程中,所有其他操作都应等待完成。
您所问的问题比互斥锁级别高一点。互斥锁是一种简单的低级设备。当用互斥锁锁定线程时,CPU要么在获得锁的线程中执行代码,要么完全在执行其他进程。换句话说,互斥锁已经锁定了属于同一(重量级)进程的所有其他线程。
您询问的是读写锁。读写锁在后台使用互斥锁。处理读写锁的POSIX函数从pthread_rwlock_
开始。由于您在Linux机器上,只需键入man pthread
并查找标记为"读/写锁定路由"的部分。
您需要一个读写器锁来允许多个读写程序。
如果您没有其他首选的线程库,那么Boost.Thread就有其中一个(Boost::shared_mutex)。这在底层使用了PThreads基元,可能会节省您自己包装原始API的时间。
我不建议你自己实现这一点——很容易得到一些看起来有效的东西,但在负载下,要么会崩溃或扼杀性能,要么(最糟糕的是)以不应该的方式默默修改数据,所以你会得到糟糕的结果。
正如@Als所指出的,这里也可以使用一个简单的boost::mutex,但不允许多次并发读取。这更容易实现,并且可能足以满足您的需求,具体取决于您的读/写访问配置文件。
如果您有从不同线程访问(读取和写入)的全局或静态对象,则需要使用互斥。
相关文章:
- 如何在 Linux C++ 应用程序中通过管道传输到 ifstream
- 协议缓冲区2和3在同一C Linux应用程序中
- 使用完美记录进行分析Linux应用程序
- 从基本C/CPP Linux应用程序中展示状态信息
- 在OS X上编译Linux应用程序 - 未找到标准库(CMATH)
- 如何在 Linux 应用程序中专门使用其他键盘
- 为C++ Linux 应用程序创建隐藏的配置文件
- 自定义C Linux应用程序中的Google Earth
- 在Fedora 20 x86_64上编译32位Linux应用程序时,请使用SNDFILE库
- Linux:应用程序响应能力和select()
- C++linux应用程序在长时间运行后停止系统.如何找到原因
- 从 C++ 中的 Linux 应用程序发送电子邮件
- 我的 linux 应用程序端口在停止时被另一个服务占用
- 通过 CMake 2.8 静态链接 Linux C++应用程序
- 使用 RTP 的 Qt Linux 应用程序上的视频流
- 嵌入式 Linux 应用程序中的周期"lags"
- 如何在Linux应用程序上使用C++中的终端输入中断循环/进程
- 如何在大型 Linux 应用程序中以编程方式"yank the network cable"?
- 用于嵌入式Linux应用程序的交叉编译Qt
- Linux应用程序控制光学媒体