使用Boost库创建跨进程互斥量时,标识符‘MutexType’未定义?
为什么会出现“MutexType”未定义的编译错误?
错误原因
你代码里的MutexType是一个未定义的自定义标识符,Boost进程间同步库中根本不存在这个类型,编译器自然无法识别它。
修正方案
根据你要创建系统级互斥量的需求,Boost提供了两种常用的进程间互斥量类型,对应不同的使用场景:
系统级命名互斥量(跨进程可见)
使用named_mutex类型,它通过唯一名称标识,能让不同进程访问同一个互斥量,适合直接全局声明使用:#include <boost/interprocess/sync/named_mutex.hpp> #include <boost/interprocess/sync/scoped_lock.hpp> using namespace boost::interprocess; // 以"open_or_create"模式创建/打开名为"MyGlobalMutex"的系统级互斥量 named_mutex mtx(open_or_create, "MyGlobalMutex"); int main() { // 自动加锁/解锁的作用域锁 scoped_lock<named_mutex> lock(mtx); // 这里写需要互斥保护的临界区代码 return 0; }匿名进程间互斥量(需配合共享内存)
使用interprocess_mutex类型,它不能直接全局声明,必须放在共享内存区域中才能被多个进程共享,适合嵌入到共享内存的数据结构里使用。
编译命令调整
编译时需要链接Boost进程间库,而不是boost_system,正确的命令是:g++ mutexes.cpp -lboost_interprocess
内容的提问来源于stack exchange,提问作者loaded_dypper
相关产品推荐
相关产品推荐

