2016-03-03 70 views
1

我想知道將一個結構複製到另一個結構並且該結構包含互斥體元素時會發生什麼。結構是:互斥體當我們將一個結構複製到另一個結構時的行爲

typedef struct p_copy { 
    int id; 
    int salary; 
    pthread_mutex_t mutex; 
} p_copy_t; 

說,我p_copy_t P1與分配給所有成員的值和具有另一結構p_copy_t P2(初始化爲0)。當我這樣做時,p2 = p1,互斥地址是否從p1複製到p2?

謝謝。

回答

1

當您通過賦值運算符將一個struct複製到另一個時,會得到對象表示形式的副本。換句話說,在左邊的操作數的效果是相同的

memcpy(&p2, &p1, sizeof(p_copy_t)); 

,假定p1p2確實是不同的。 pthread_mutex_t的細節沒有記錄,但假設它是一個struct(而不是,例如,而不是指向一個指針),你會得到該結構的內容的副本,而不是其地址。

據我所知,使用pthread_mutex_*()函數中的任何一個操作這樣的複製互斥對象的結果是未定義的。

+0

謝謝你的回答。 – user3606720

0

從一個結構複製時,使用起來更安全。如果結構包含指針,那麼只有地址被複制到目的地。

Example: 

memcpy(&p2, &p1, sizeof(p1)); 

這就是說,複製pthread_mutex取決於如何定義結構。

您可以隨時使用指針來獲取定義的互斥體的地址,無需複製到另一個結構,它也更安全。

+0

C支持'struct'賦值,如果它提供了你想要的語義,沒有什麼特別的理由可以避免它。尤其是,沒有理由選擇'memcpy()',因爲它提供了與普通賦值相同的語義。 –

+0

我同意。謝謝。 –

相關問題