在编译时,我得到了这个错误
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);
意味着函数需要一个pointer到
pthread_mutex_t
。您需要获取互斥变量的地址,即在调用函数时将
padlock
替换为&padlock
。例如,
pthread_mutex_lock(padlock);
应该读
pthread_mutex_lock(&padlock);
等等(对于互斥锁和条件变量)。
值得注意的是,在您显示的代码中,
padlock
和non_full
是函数的本地代码,每次调用函数时都会被创建和销毁。因此没有同步发生。您需要重新考虑如何声明和初始化这两个变量。代码还有其他问题。例如,使用条件变量的方式在几个方面有缺陷。
考虑到这一点,我建议遵循pthreads教程。
关于c - C中的pthread,不兼容类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15658184/