我有以下代码,我想知道是否有人可以为我看一下。
我有一个多线程应用程序,它们共享一个对象并对其进行操作。我已经创建了一个指向它的某个元素的指针,所以我不必每次都输入长路径,但是我担心它可能只是修改共享对象的副本,而不是共享对象本身。
以下是代码:
RPCThread* thr = &(args->s->_shared-_>rpcThread[args->threadIndex]);
...
thr->_in_use = true;
...
sema_post(&(thr->_sem_result));
这是有效还是仅修改副本?
答案 0 :(得分:2)
取决于成员_rpcThread的类型。如果它只是RPCThread []或* RPCThread 那我不认为你有问题。如果它是类型,那么你需要 知道其运算符[]的返回类型。如果相关的定义是 返回一个值而不是一个引用,你可能有一个副本。
当然,除非RPCThread是使用信封式成语或实现虚拟代理的类。
如果_rpcThread只是一个数组,那么你不应该在这里遇到类似的问题。
如果不做更多的代码阅读,这是一件好事。你能改变一下吗?
RPCThread* thr = &(args->s->_shared->_rpcThread[args->threadIndex]);
到此:
RPCThread* thr = args->s->_shared->_rpcThread + args->threadIndex;
不会导致编译时错误?