我担心由于使用对象的方式,这段代码没有按照我的意愿行事

时间:2009-04-16 17:36:56

标签: c++ multithreading shared-memory

我有以下代码,我想知道是否有人可以为我看一下。

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

以下是代码:

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

这是有效还是仅修改副本?

1 个答案:

答案 0 :(得分:2)

取决于成员_rpcThread的类型。如果它只是RPCThread []或* RPCThread 那我不认为你有问题。如果它是类型,那么你需要 知道其运算符[]的返回类型。如果相关的定义是 返回一个值而不是一个引用,你可能有一个副本。

当然,除非RPCThread是使用信封式成语或实现虚拟代理的类。

如果_rpcThread只是一个数组,那么你不应该在这里遇到类似的问题。

如果不做更多的代码阅读,这是一件好事。你能改变一下吗?

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

到此:

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

不会导致编译时错误?