在一个子线程中初始化结构体变量,在另一个子线程中打印结构体变量中元素
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include <string.h>
#include <stdlib.h>
struct data_t{
char name[20];
int id;
int score;
};
struct data_t stu;
sem_t read_sem;
sem_t write_sem;
void *input_thread(void *arg)
{
while(1){
sem_wait(&write_sem);
memset(&stu, 0, sizeof(stu));
printf("please input name id score\n");
//scanf("%s,%d,%d\n", stu.name, &(stu.id), &(stu.score));//错误代码
scanf("%s%d%d", stu.name, &(stu.id), &(stu.score));//""中不能带有,号。不能带\n
fflush(stdin);//刷新缓存
if(strncmp(stu.name, "quit", 4) == 0){
exit(0);
}
sem_post(&read_sem);
}
}
void *output_thread(void *arg)
{
while(1){
sem_wait(&read_sem);
printf("name:%s\n", stu.name);
printf("id:%d\n", stu.id);
printf("score:%d\n", stu.score);
sem_post(&write_sem);
}
}
int main(int argc, const char *argv[])
{
sem_init(&read_sem,0, 0);
sem_init(&write_sem,0 ,1);
int ret1;
int ret2;
pthread_t tid1;
pthread_t tid2;
ret1 = pthread_create(&tid1, NULL, input_thread, NULL);
ret2 = pthread_create(&tid2, NULL, output_thread, NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现