需求:
C语言实现生产者 - 消费者模型
- student_queue队列
- producer线程
- consumer线程
问题:
从队列中获取数据时,执行student_queue_get()函数后,student没有被赋值
- 在student_queue_get()函数中时,student被正确赋值
- 执行完 student_queue_get() 之后,student被重新赋值(Student student声明时的状态)
看代码:
- student_queue.c 队列部分
int student_queue_get(StudentQueue *queue, Student *student){
student = queue->front;
if(student){
queue->front = student->next;
if(!queue->font){
queue->rear = NULL;
}
}
// do something ...
return 0;
}
- demo.c 入口函数部分
void *thread_run(void *userdata){
for(;;){
Student student;
student_packet_get(&queue, &student);
LOGI("Student: { age: %d, name: %s}\n", student.age, student.name);// 打印的值: age = 0, name = 乱码
}
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_run, NULL);
}
这是因为student_queue_get()中对参数student的修改没有传递到外面。
本质上还是pass by value的问题