传递结构时不兼容的类型

时间:2014-10-12 01:08:28

标签: c struct monitor

我有一个为监视器创建多个线程的程序(一次只运行一个线程的抽象对象)在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);
    }
}

1 个答案:

答案 0 :(得分:0)

  

我应该延迟主线程结束吗?某种程度的   (线程!=完成)也许循环?

POSIX Threads Programming终止帖子

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