【发布时间】:2021-07-08 18:44:33
【问题描述】:
我在 C 语言中的这个程序有问题。简而言之,我必须通过聚合器发送传感器创建的数据。聚合器通过写入器线程,通过三个读取器线程(thread_lettore)将传感器生成的值读取到三个不同的队列中,只有当我创建线程时,所有三个都连接到创建的最后一个队列。我希望每个线程都有自己的队列。传递传感器的消息队列 id 很容易,因为只有一个消息队列,但是如何将不同的消息队列 id 传递给每个线程?
我在这个for 循环中发现了错误,但我无法解决它。它生成正确的队列,但是当我将参数传递给pthread_create 时,它只传递了最后一个创建的队列。
MonitorLS * m = (MonitorLS*) malloc(sizeof(MonitorLS));
for (int i=0; i<3; i++){
m->id_coda_c = id_code_collettori[i];
pthread_create(&threads[i], &attr, thread_lettore, (void*)m);
}
这是头文件中的结构:
typedef struct {
int variabile;
pthread_mutex_t mutex;
pthread_cond_t cv_lett;
pthread_cond_t cv_scritt;
int num_scrittori;
int num_lettori;
int id_coda_s;
int id_coda_c;
} MonitorLS;
这就是我在主文件中创建三个不同消息队列的方式:
char chiave = 'a';
int id_code_collettori[3];
for (int i=0; i<3; i++){
key_t key_c = ftok (".", chiave);
id_code_collettori[i] = msgget(key_c, IPC_CREAT|0644);
chiave = chiave + 1;
}
这是我的大学教授布置给我的家庭作业。对不起我的英语不好。
【问题讨论】:
-
您正在向每个线程发送相同的指针。该指针是一些内存的地址。在该内存中,您正在写入所有队列 ID。当你在内存中写入数据时,它会替换之前相同地址的数据。
-
我知道,我在谷歌上搜索了各种解决方案,但我无法解决这个问题
-
你明白问题所在了吗?
-
@user253751 是的,但我尝试了很多方法来解决,但我无法解决
-
你能用你自己的话解释一下导致问题的原因吗?
标签: c multithreading pthreads