如何创建信号量矩阵

问题描述 投票:0回答:2

我对此代码有问题,我必须使用结构“ tavole”创建信号量矩阵,但是在编译时出现错误:

错误:使用类型'sem_t {aka union}初始化类型'int'时的类型不兼容”tavole matrici = {chessboard [SO_ALTEZZA] [SO_BASE],sem_matrix [SO_ALTEZZA] [SO_BASE],posFree};

您能解释一下为什么吗?

   typedef struct {
        int scacchiera[SO_ALTEZZA][SO_BASE];
        sem_t semafori[SO_ALTEZZA][SO_BASE];
        int posLibere;
   }tavole;

 int main(void){
    void inizializza_matrice(int matrice[SO_ALTEZZA][SO_BASE],    
                             int   n);
    void inizializza_sem_matrix(
                            sem_t matrice[SO_ALTEZZA][SO_BASE], 
                            int n);
    int chessboard[SO_ALTEZZA][SO_BASE], posFree = 0, value = 0;
    sem_t sem_matrix[SO_ALTEZZA][SO_BASE];
    tavole matrici = 
                {chessboard[SO_ALTEZZA][SO_BASE], 
                 sem_matrix[SO_ALTEZZA][SO_BASE],
                 posFree}; 

    inizializza_matrice(matrici.scacchiera, 0);
    inizializza_sem_matrix(matrici.sem_matrix, 0);

    for(int i = 0; i < SO_ALTEZZA; i++){
         printf("\n");
         for(int j = 0; j < SO_BASE; j++){
         sem_getvalue(&matrici.semafori[i][j], &value);
         printf("%d ", value);
         }
    }


     return 0;
     }

     void inizializza_matrice
          (int matrice[SO_ALTEZZA][SO_BASE], int n){
             for(int i = 0; i < SO_ALTEZZA; i++){
                for(int j = 0; j < SO_BASE; j++){
                   matrice[i][j] = n;
                }
             }
          }

          void inizializza_sem_matrix
               (sem_t matrix[SO_ALTEZZA][SO_BASE], int n){
                   for(int i = 0; i < SO_ALTEZZA; i++){
                        for(int j = 0; j < SO_BASE; j++){
                            sem_init(&matrix[i][j], 0, n);
                        }
                    }
          }
c matrix struct system semaphore
2个回答
0
投票

您的结构需要数组,但是您传递了单个元素

替换:

tavole matrici = 
        {chessboard[SO_ALTEZZA][SO_BASE], 
         sem_matrix[SO_ALTEZZA][SO_BASE],
         posFree}; 

with

tavole matrici = 
        {chessboard, 
         sem_matrix,
         posFree}; 

0
投票

您可以替换为:

int chessboard[SO_ALTEZZA][SO_BASE], posFree = 0, value = 0;
sem_t sem_matrix[SO_ALTEZZA][SO_BASE];
tavole matrici = 
                {chessboard[SO_ALTEZZA][SO_BASE], 
                 sem_matrix[SO_ALTEZZA][SO_BASE],
                 posFree}; 

使用此:

int value = 0;
tavole matrici;

在创建结构之前,您无需声明结构成员。

代码中还有另一个问题。您应该替换为:

inizializza_sem_matrix(matrici.sem_matrix, 0);

使用此:

inizializza_sem_matrix(matrici.semafori, 0);
© www.soinside.com 2019 - 2024. All rights reserved.