gpt4 book ai didi

c++ - IPC 与 QSharedMemory 和风险,如果其中一个进程挂起

转载 作者:行者123 更新时间:2023-11-28 05:01:24 26 4
gpt4 key购买 nike

我注意到如果其中一个进程挂起,QSharedmemory.Lock() 将永远持续下去。

而且QT没有提供任何像TryLock()这样的方法,所以不管什么原因,如果子进程死了,都会导致主进程出问题,有什么解决方法吗?

最佳答案

您可以将所有对 QSharedMemory.lock()/unlock() 调用的使用包装在一个包装器对象中,它可以确保无论返回路径是什么(抛出异常...)都能解锁共享内存。

例如:

class SharedMemoryLocker {
public:
SharedMemoryLocker(QSharedMemory & sharedMemory):m_sharedMemoryWrapped(sharedMemory) { m_sharedMemoryWrapped.lock(); }
~SharedMemoryLocker() { m_sharedMemoryWrapped.unlock(); }

private:
QSharedMemory & m_sharedMemoryWrapped;
};

用法示例是:

void f(QSharedMemory & mem) {
{
SharedMemoryLocker locker(mem);
// in this scope the shared memory is locked while no exception, return .. process ends
// exiting will unlock the shared memory
} // QSharedMemoryLocker destructor is called here unlocking the shared memory
// here the shared memory is unlocked
}

希望对你有帮助

关于c++ - IPC 与 QSharedMemory 和风险,如果其中一个进程挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com