Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt排队信号是否提供内存隔离?_C++_Qt - Fatal编程技术网

C++ Qt排队信号是否提供内存隔离?

C++ Qt排队信号是否提供内存隔离?,c++,qt,C++,Qt,如果我在发出(Qt::BlockingQueuedConnection)之前更改了内存中与信号参数无关的内容,那么另一个线程会看到这些修改吗?由于操作系统通常以进程为基础(而非线程为基础)更改内存,您可以尝试访问该内存,虽然这可能不是你想要的。也许你应该加上到底是什么问题,或者你的意图是什么。@SebastianLange,我会重新措辞。如果您从一个线程写入相同的内存,从另一个线程读取相同的内存,这是一种竞争条件。如果从一个线程写入内存,然后阻塞BlockingQueuedConnection,

如果我在发出(
Qt::BlockingQueuedConnection
)之前更改了内存中与信号参数无关的内容,那么另一个线程会看到这些修改吗?

由于操作系统通常以进程为基础(而非线程为基础)更改内存,您可以尝试访问该内存,虽然这可能不是你想要的。也许你应该加上到底是什么问题,或者你的意图是什么。@SebastianLange,我会重新措辞。如果您从一个线程写入相同的内存,从另一个线程读取相同的内存,这是一种竞争条件。如果从一个线程写入内存,然后阻塞BlockingQueuedConnection,然后从第二个线程(接收发出信号的线程)读取相同的内存-这也是一种争用条件吗?要好得多。根据我的理解,是的,这应该有效。有趣的是,你正在使用信号作为某种互斥。如果你能让你的线程阻塞那么长的时间,不仅是读/写部分,还有事件队列中的排队和等待(16ms?),那么这应该是可行的。不过我还是希望有一个
QMutex
,它可以在访问内存对象时被锁定。@SebastianLange,其目的是等待插槽完成执行,并用最简单的代码执行。疑问如下:数据与信号/插槽参数无关,因此可能不需要信号/插槽机制来保证读取数据的安全性。由于整个线程正在阻塞数据,因此在等待期间根本不应修改数据。