Семафоры
Семафоры
Используются для синхронизации выполнения приложений и защиты критических секций.
#defain SEMKEY 77
union semun //одно из полей буде использоваться
{
int val;
struct semid_ds *bat;
unsigned short *array;
struct seminfo *buf;
Рекомендуемые материалы
}
main()
{
union semun inisem; //для инициализации
unshort ainisem[1]={1};
int semid;
int i,j,pid;
struct sembuf p,v;
semid=semget(SEMKEY,1,0777|[IPC_CREAT]); //создание, IPC_CREAT - макрос создания, 1 – число символов, 0777 - моды доступа
inisem=ainisem; //команда
semctl(semid,0,SETALL,inisem); //инициализация
p.sem_num=0;
p.sem_op=-1;
p.sem_flg=SEM_UNDO;
v.sem_num=0;
v.sem_op=1;
v.sem_flg=SEM_UNDO;
fork();
pid=getpid(); //определяем номер процесса
for(i=0;;i<10;i++)
{
semop(semid,&p,1); // сколько операций выполнено
Если Вам понравилась эта лекция, то понравится и эта - 4. Идентификация объектов управления.
//критическая секция
for(j=0;g<5;g++)
{
printf(“%d%d”, pid, j );
semop(semid,&v,1);
}}