[英]concurrent access and free of heap object
由于您说“互斥体可以是一个指针”,因此您可以执行以下操作:
struct ds { pthread_mutex_t * mutex; /* ... */ };
struct ds * create_ds()
{
struct ds * p = calloc(1, sizeof(struct ds));
pthread_mutex_t * q = malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(q, NULL);
ds->mutex = q;
return p;
}
void free_ds(struct ds * p)
{
pthread_mutex_t * q = p->mutex;
pthread_mutex_lock(q);
free(p);
pthread_mutex_unlock(q);
pthread_mutex_destroy(q);
free(q);
}
但是,在我看来,销毁对象并不完全符合并发访问/同步的习惯用法。 如果销毁了某物,那么它就不再存在,因此所有线程都将受到此影响。 线程应该如何知道给定的ds
指针是否仍指向有效对象?
相反,您可能应该在某处具有ds
对象的集合 ,并且对该集合的插入/擦除访问应具有其自己的单独的,集合范围的互斥量。 每当线程想要获取对集合中某个对象的引用时,它都应在互斥锁的保护下这样做,并且该集合应知道谁当前持有引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.