在编译时,我得到了这个错误

expected 'union pthread_mutex_t *' but argument is type of 'pthread_mutex_t'

1)“union pthread_mutex_t*”和“pthread_mutex_t”有什么区别?
2)如何使“pthread_mutex_t”成为正确的参数?
void buffer_insert(int number)
{
  pthread_mutex_t padlock;
  pthread_cond_t non_full;
  pthread_mutex_init(&padlock, NULL);
  pthread_cond_init(&non_full, NULL);
  if(available_buffer()){
    put_in_buffer(number);
  } else {
    pthread_mutex_lock(padlock);
    pthread_cond_wait(non_full, padlock);
    put_in_buffer(number);
    pthread_mutex_unlock(padlock);
    pthread_cond_signal(non_empty);
  }
}

最佳答案

中的星号

int pthread_mutex_lock(pthread_mutex_t *mutex);

意味着函数需要一个pointerpthread_mutex_t
您需要获取互斥变量的地址,即在调用函数时将padlock替换为&padlock
例如,
pthread_mutex_lock(padlock);

应该读
pthread_mutex_lock(&padlock);

等等(对于互斥锁和条件变量)。
值得注意的是,在您显示的代码中,padlocknon_full是函数的本地代码,每次调用函数时都会被创建和销毁。因此没有同步发生。您需要重新考虑如何声明和初始化这两个变量。
代码还有其他问题。例如,使用条件变量的方式在几个方面有缺陷。
考虑到这一点,我建议遵循pthreads教程。

关于c - C中的pthread,不兼容类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15658184/

10-10 01:24