将一个结构复制到另一个结构时的互斥行为

时间:2016-03-03 02:26:08

标签: c mutex

我想知道当我将一个结构复制到另一个结构并且该结构包含互斥元素时会发生什么。结构是:

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?

谢谢。

2 个答案:

答案 0 :(得分:1)

当您通过赋值运算符将一个memcpy(&p2, &p1, sizeof(p_copy_t)); 复制到另一个p1时,您将获得对象表示的副本。换句话说,对左手操作数的影响与

的影响相同
p2

,假设pthread_mutex_tstruct确实不同。 pthread_mutex_*()的详细信息没有记录,但假设它是echo date_default_timezone_get(); (而不是,例如,指向一个的指针),您将获得该结构内容的副本,而不是其地址的副本

据我所知,使用任何UTC函数对这样复制的互斥对象进行操作的结果是未定义的。

答案 1 :(得分:0)

从一个结构复制时,使用起来更安全。如果结构包含指针,则只将地址复制到目标。

Example:

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

这就是说,复制pthread_mutex取决于结构的定义方式。

您始终可以使用指针来获取定义的互斥锁的地址,而无需复制到其他结构,它也更安全。