2009-04-16 134 views
1

我有以下代碼,我想知道是否有人可以爲我查看它。我擔心這段代碼沒有按照我想要的方式執行,因爲使用對象的方式

我有一個多線程應用程序,它們都共享一個對象並對其進行操作。我創建了一個指向它的某個元素的指針,所以我不必每次都輸入長路徑,但是我擔心它可能只是修改共享對象的副本,而不是共享對象本身。

下面是代碼:

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

這是有效或會這只是被修改副本?

+0

TLI!你需要告訴我們更多關於你的數據結構的信息......但是我沒有看到任何可以複製的東西,所以在獲得更多信息之前,暫時的迴應是你正在修改正確的對象......但不一定安全線程。 – Varkhan 2009-04-16 17:47:10

回答

2

取決於成員_rpcThread的類型。如果它只是RPCThread []或* RPCThread 那麼我認爲你沒有問題。如果它是一個類的類型,那麼你需要 知道它的運算符[]的返回類型。如果相關定義是 返回值而不是引用,則可能有副本。

除非,當然,RPCThread是一個使用信封字母習語或實現虛擬代理的類。

如果_rpcThread只是一個數組,你不應該在這裏提出一個別名問題。

這是一件很好的事情來檢查,而不要做更多的代碼閱讀。你可以改變這一點:

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

這樣:

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

,而不會引起編譯時錯誤?

+0

是的,我可以做到這一點。 – samoz 2009-04-16 18:08:36

相關問題