2012-06-15 40 views
2

现在已经有一阵子了学习和愤怒,我来到了一个心理模型,何时使用什么类型的互斥锁使用boost共享内存,看起来像这样:与boost :: interprocess_mutex相比,为什么不在共享内存中使用boost :: mutex?

class IntendedToResideInProcessMemory { 
    boost::mutex mutex_for_this_process; // 1 
    boost::interprocess::interprocess_mutex 
     ok_but_pointless_to_use_interprocess_mutex_here; // 2 
} 

class IntendedToBeCreatedInSharedMemory { 
    boost::mutex bad_mutex_at_a_guess_this_will_allocate_something_on_heap;// 3 
    boost::interprocess::interprocess_mutex 
     good_for_multiprocess_shared_lock; // 4 
} 

我希望我的天堂原则上这个错误是错误的,所以请纠正我的错误。我的意图是前进并纠正现有的代码以及不符合此图片的我自己的代码,但我想确定。

这个问题的两个部分: 我认为它确实没问题,但没有意义使用// 2 - 在上下文中,这比// 1更不好,但是原因是什么?性能?

对于// 3,我的猜测是对的吗?有人能够给出技术幕后的原因,为什么它不起作用,或者至少在什么情况下不起作用?

回答

3

关于第3点:您的boost::mutex对您的其他进程不可见。进程间互斥使用一个全局命名的对象,可以被另一个进程访问,afaik,boost::mutex没有。

您在共享内存中创建的boost::mutex,可能在Windows中,例如,将一个HANDLE分配给windows Mutex对象,该对象将在您的进程的私有堆上分配。这个堆对其他进程是不可见的。

如果你看一下boost::mutex类,它有这个typedef

typedef platform-specific-type native_handle_type;这是特定的平台。

又如:POSIX互斥由它们的地址,这是处理之间不同 由于@DeadMG为例如:)

识别
相关问题