当我们将一个结构复制到另一个结构时的互斥行为
Mutex Behavior when we copy one structure to another
我想知道当我将一个结构复制到另一个结构并且该结构包含互斥元素时会发生什么。结构是:
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?
谢谢。
从一个结构复制时使用起来更安全。如果结构包含指针,则仅将地址复制到目标。
Example:
memcpy(&p2, &p1, sizeof(p1));
也就是说,复制pthread_mutex取决于结构是如何定义的。
你总是可以使用一个指针来获取定义的互斥量的地址,而不需要复制到另一个结构,也更安全。
当您通过赋值运算符将一个 struct
复制到另一个时,您将获得 对象表示形式 的副本。换句话说,对左操作数的影响与
相同
memcpy(&p2, &p1, sizeof(p_copy_t));
,假设 p1
和 p2
确实不同。 pthread_mutex_t
的细节没有记录,但假设它是一个 struct
(而不是,例如,一个指针),你会得到该结构内容的副本,而不是它的地址.
据我所知,使用任何 pthread_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?
谢谢。
从一个结构复制时使用起来更安全。如果结构包含指针,则仅将地址复制到目标。
Example:
memcpy(&p2, &p1, sizeof(p1));
也就是说,复制pthread_mutex取决于结构是如何定义的。
你总是可以使用一个指针来获取定义的互斥量的地址,而不需要复制到另一个结构,也更安全。
当您通过赋值运算符将一个 struct
复制到另一个时,您将获得 对象表示形式 的副本。换句话说,对左操作数的影响与
memcpy(&p2, &p1, sizeof(p_copy_t));
,假设 p1
和 p2
确实不同。 pthread_mutex_t
的细节没有记录,但假设它是一个 struct
(而不是,例如,一个指针),你会得到该结构内容的副本,而不是它的地址.
据我所知,使用任何 pthread_mutex_*()
函数对此类复制的互斥对象进行操作的结果是未定义的。