gpt4 book ai didi

c - 传递结构时不兼容的类型

转载 作者:行者123 更新时间:2023-11-30 17:27:41 27 4
gpt4 key购买 nike

我有一个程序,它为 C 中的监视器(一次只运行一个线程的抽象对象)测试创建多个线程。我在它似乎可以工作但在其他地方明显失败的地方遇到了错误,我认为是由于每个线程获得自己的显示器。

我需要以某种方式将结构或指向它的指针从一个程序传递到另一个程序,以便我可以确保它们都指向同一个程序。在这个实现中,我遇到了段错误,我认为没有指导的更多工作只会使程序更加复杂。

一定有更好的方法来定义此结构,而不是简单地在两个程序中定义它?

相关监控代码:

#define N 5
#include<stdio.h>
#include <pthread.h>
#include<semaphore.h>

struct cond {
int blocked;
sem_t sema,empty, full;
int count;
char buf[N];
};

void waitNotEmpty(struct cond mon);
void waitNotFull(struct cond mon);
//void signalNotEmpty(void);
//void signalNotFull(void);
struct cond spawnMonitor(void);
void moninsert(char alpha, struct cond mon);
char monremove(struct cond mon);

struct cond spawnMonitor(void){
struct cond mon;
sem_init(&mon.sema, 0, 1);
mon.blocked = 0;
sem_init(&mon.empty, 0, 0);
sem_init(&mon.full, 0, 1);
mon.count = 0;
int value;
sem_getvalue(&mon.sema, &value);
printf("INITIAL VALUE: %d\n", value);
return mon;
}

以及运行它的MonitorDemo程序:

#define N 10000000
#include<stdio.h>
#include <pthread.h>
#include<semaphore.h>


struct cond {
int blocked;
sem_t sema,empty, full;
int count;
char buf[N];
};

struct cond mon;

void main (void)
{

void producer ();
void consumer ();

int i = 0;
pthread_t thread[10];
mon = spawnMonitor();
for(i = 0; i < 10; i++){
pthread_create(&thread[i], NULL, (void *) producer, NULL);
i++;
pthread_create(&thread[i], NULL, (void *) consumer, NULL);
}
}

最佳答案

Should I delay the main thread from ending then? Some kind of while (threads != done) loop perhaps?

POSIX Threads Programming关于终止线程的说法:

  • 如果您不显式调用 pthread_exit(),那么如果 main() 在它生成的线程之前完成,则肯定存在问题。它创建的所有线程都将终止,因为 main() 已完成并且不再存在以支持线程。
  • 通过让 main() 显式调用 pthread_exit() 作为它所做的最后一件事,main() 将阻塞并保持事件状态以支持它创建的线程,直到它们完成。

关于c - 传递结构时不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com