我可以使用初始化器初始化静态内存中的互斥体:
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
但是如何在共享内存中初始化一个变量,在该内存中我必须与初始化变量分开分配内存?我可以执行 memcpy() 吗?
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
memcpy(&globalmutex, &mymutex, sizeof(mymutex);
我想我记得很久以前读过,当将互斥锁分配到保证初始化为零的内存中时,它不需要初始化——正是针对这种情况——但我在任何地方都找不到写下来的内容。这是真的吗?--我注意到 PTHREAD_MUTEX_INITIALIZER 在我的 Redhat 系统上被定义为 { { 0, 0, 0, 0, 0, 0, { 0, 0 } } } 。
这里需要小心,并非所有实现都支持可以跨进程工作的互斥体。
PThreads 本身通过使用进程共享属性来支持这一点,但如果您需要的话,您将不会使用默认的初始化程序。
相反,你需要使用pthread_mutex_init()
正确构造互斥体属性结构后:
int pthread_mutex_init(
pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr);
最好的选择是在共享内存中分配空间,然后将其转换为正确的类型并将其传递给init
功能。我认为这可能比初始化后复制它更安全。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)