linux信号量的示范例程
时间: 2023-10-23 18:42:57 浏览: 87
以下是一个简单的 Linux 信号量的示范例程:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
};
int main() {
int sem_id;
key_t key;
struct sembuf sem_op;
// 生成键值
if ((key = ftok(".", 'a')) == -1) {
perror("ftok");
exit(1);
}
// 创建信号量集
if ((sem_id = semget(key, 1, IPC_CREAT | 0666)) == -1) {
perror("semget");
exit(1);
}
// 初始化信号量
union semun arg;
arg.val = 0;
if (semctl(sem_id, 0, SETVAL, arg) == -1) {
perror("semctl");
exit(1);
}
// P 操作
sem_op.sem_num = 0;
sem_op.sem_op = -1;
sem_op.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_op, 1) == -1) {
perror("semop");
exit(1);
}
// V 操作
sem_op.sem_num = 0;
sem_op.sem_op = 1;
sem_op.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_op, 1) == -1) {
perror("semop");
exit(1);
}
// 删除信号量集
if (semctl(sem_id, 0, IPC_RMID, arg) == -1) {
perror("semctl");
exit(1);
}
return 0;
}
希望能够帮助你!
阅读全文