在编译时,我收到了这个错误
expected 'union pthread_mutex_t *' but argument is type of 'pthread_mutex_t'
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
中的星号
int pthread_mutex_lock(pthread_mutex_t *mutex);
Run Code Online (Sandbox Code Playgroud)
意味着该函数采用一个指针到pthread_mutex_t.
你需要把你的互斥体变量的地址,如更换padlock与&padlock调用函数时.
例如,
pthread_mutex_lock(padlock);
Run Code Online (Sandbox Code Playgroud)
应该读
pthread_mutex_lock(&padlock);
Run Code Online (Sandbox Code Playgroud)
依此类推(对于互斥锁和条件变量).
值得注意的是,在您显示的代码中,它是函数的本地代码,padlock并且non_full每次调用函数时都会创建和销毁.因此,没有发生同步.您需要重新思考如何声明和初始化这两个变量.
代码还有其他问题.例如,您使用条件变量的方式在几个方面存在缺陷.
考虑到这一点,我建议您遵循pthreads教程.