繁体   English   中英

pthread互斥锁,使用pthread_mutex_trylock()进行线程同步

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM