Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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++ I';我担心这个代码不是';因为对象的使用方式,我不能做我想做的事情_C++_Multithreading_Shared Memory - Fatal编程技术网

C++ I';我担心这个代码不是';因为对象的使用方式,我不能做我想做的事情

C++ I';我担心这个代码不是';因为对象的使用方式,我不能做我想做的事情,c++,multithreading,shared-memory,C++,Multithreading,Shared Memory,我有下面的代码,我想知道是否有人可以帮我看一下 我有一个多线程应用程序,所有的应用程序共享一个对象并对其进行操作。我已经创建了一个指向它的某个元素的指针,这样我就不必每次都键入长路径,但我担心它可能只是修改了共享对象的一个副本,而不是共享对象本身 代码如下: RPCThread* thr = &(args->s->_shared-_>rpcThread[args->threadIndex]); ... thr->_in_use = true; ... sem

我有下面的代码,我想知道是否有人可以帮我看一下

我有一个多线程应用程序,所有的应用程序共享一个对象并对其进行操作。我已经创建了一个指向它的某个元素的指针,这样我就不必每次都键入长路径,但我担心它可能只是修改了共享对象的一个副本,而不是共享对象本身

代码如下:

RPCThread* thr = &(args->s->_shared-_>rpcThread[args->threadIndex]);
...
thr->_in_use = true;
...
sema_post(&(thr->_sem_result));

这是有效的还是只是在修改副本?

取决于成员的类型\u rpcThread。如果它只是RPCThread[]或*RPCThread 那我觉得你没问题。如果是类类型,那么您需要 了解其运算符[]的返回类型。如果相关定义是 返回一个值而不是引用,您可能有一个副本

当然,除非RPCThread是一个使用信封字母习惯用法或实现虚拟代理的类

如果_rpcThread只是一个数组,那么这里就不应该有您所问的那种别名问题

这里有一个很好的检查方法,无需进行更多的代码阅读。你能改变这个吗:

 RPCThread* thr = &(args->s->_shared->_rpcThread[args->threadIndex]);
为此:

 RPCThread* thr = args->s->_shared->_rpcThread + args->threadIndex;

不会导致编译时错误?

TLI!你需要告诉我们更多关于你的数据结构。。。但是我在这里没有看到任何可以复制的东西,所以在我得到更多信息之前,一个试探性的回答是你正在修改正确的对象。。。但不一定安全穿线。这是个好兆头。。。总是有可能存在一些奇怪的转换运算符重载,但我想另一件要检查的事情是,不同的线程认为它们具有相同的地址(将来自不同线程的地址记录为十六进制值,检查标识)