3

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

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);
  }
}
4

1 回答 1

6

中的星号

int pthread_mutex_lock(pthread_mutex_t *mutex);

表示该函数需要一个指向的指针pthread_mutex_t

您需要获取互斥变量的地址,即在调用函数时替换padlock为。&padlock

例如,

pthread_mutex_lock(padlock);

应该读

pthread_mutex_lock(&padlock);

依此类推(对于互斥锁和条件变量)。

还值得注意的是,在您显示的代码中,padlock并且non_full是函数本地的,并且每次调用函数时都会创建和销毁。因此不会发生同步。您需要重新考虑如何声明和初始化这两个变量。

代码还有更多问题。例如,您使用条件变量的方式在几个方面存在缺陷。

考虑到这一点,我建议遵循 pthreads 教程。

于 2013-03-27T11:57:43.353 回答