【发布时间】:2013-03-27 11:56:04
【问题描述】:
编译时出现这个错误
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);
}
}
【问题讨论】:
-
想展示一些代码吗?
-
pthread_mutex_lock(&padlock);和pthread_cond_wait(&non_full, &padlock);和pthread_mutex_unlock(&padlock);等... 大多数 pthread 函数通过地址获取参数;只有少数没有。 -
NPE 已经解释了指针部分,对于 'union' 关键字,您可以假设不同数据类型和可能不同大小的变量可能会共享相同的内存位置(这通常用于 int , unsigned, float, long 等共享一个内存位置)。这是一种方便的技术,人们不希望将一段数据限制为特定类型。
-
该代码不会“锁定”任何东西 - 因为
padlock是一个局部变量,buffer_insert()的每次调用都将使用一个不同的 锁定。请不要这样编码。 -
@FrankH。是的,我很久以前就修好了。现在一切正常