[英]pthread mutexes, thread synchronization using pthread_mutex_trylock()
我一直在努力获取键值哈希字典,而我需要做的事情之一就是在负载系数达到阈值时重新哈希,以确保没有其他线程在访问它,我正尝试将其降低到一个队列。
这是否将成功阻止多个线程同时读取/写入资源,或者是否缺少我所需要的东西。
谢谢!!
typedef struct {
pthread_mutex_t mutex;
pthread_cond_t cond;
pthread_rwlock_t rw_lock;
} thread_conch;
typedef struct {
thread_conch d_lock;
size_t elements;
size_t hash_size;
struct kv_record **bucket;
} dictionary;
void init_conch(thread_conch *t_lock)
{
pthread_mutex_init(&t_lock->mutex, NULL);
pthread_cond_init(&t_lock->cond, NULL);
pthread_rwlock_init(&t_lock->rw_lock, NULL);
}
void destroy_conch(thread_conch *t_lock)
{
pthread_mutex_destroy(&t_lock->mutex);
pthread_cond_destroy(&t_lock->cond);
pthread_rwlock_destroy(&t_lock->rw_lock);
}
void hold_conch(thread_conch *t_lock)
{
pthread_rwlock_wrlock(&t_lock->rw_lock);
while (pthread_mutex_trylock(&t_lock->mutex) != 0)
;
}
void read_conch(thread_conch *t_lock)
{
while (pthread_rwlock_tryrdlock(&t_lock->rw_lock) != 0)
pthread_cond_wait(&t_lock->cond, &t_lock->mutex);
}
void release_conch(thread_conch *t_lock)
{
pthread_rwlock_unlock(&t_lock->rw_lock);
pthread_mutex_unlock(&t_lock->mutex);
pthread_cond_broadcast(&t_lock->cond);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.