如何创建信号量矩阵
How to create a matrix of semaphores
这段代码有问题,我必须使用结构 "tavole" 创建一个信号量矩阵,但是当我编译时出现错误:
错误:使用类型“sem_t {aka union }”初始化类型“int”时类型不兼容
tavole matrici = {棋盘[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);
}
}
}
您的结构需要数组,但您传递的是单个元素
替换:
tavole matrici =
{chessboard[SO_ALTEZZA][SO_BASE],
sem_matrix[SO_ALTEZZA][SO_BASE],
posFree};
和
tavole matrici =
{chessboard,
sem_matrix,
posFree};
你可以替换这个:
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);
因为struct成员的名字是semafori
,不是sem_matrix
.
这段代码有问题,我必须使用结构 "tavole" 创建一个信号量矩阵,但是当我编译时出现错误:
错误:使用类型“sem_t {aka union }”初始化类型“int”时类型不兼容 tavole matrici = {棋盘[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);
}
}
}
您的结构需要数组,但您传递的是单个元素
替换:
tavole matrici =
{chessboard[SO_ALTEZZA][SO_BASE],
sem_matrix[SO_ALTEZZA][SO_BASE],
posFree};
和
tavole matrici =
{chessboard,
sem_matrix,
posFree};
你可以替换这个:
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);
因为struct成员的名字是semafori
,不是sem_matrix
.