Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемЗоя Мишагина
1 Семафоры-счетчики POSIX Программирование с использованием POSIX thread library
2 Семафоры-счетчики POSIX Realtime Extension (1003.1b- 1993/1003.1i-1995) Сборка в Solaris требует ключа –lrt В Linux включены в libpthread.so
3 Неименованные семафоры cc [ flags] file –lrt [ libraries ] #include int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem);
4 Операции над семафорами cc [ flags] file –lrt [ libraries ] #include int sem_post(sem_t *sem); int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem);
5 sem_getvalue cc [ flags] file –lrt [ libraries ] #include int sem_getvalue( sem_t *restrict sem, int *restrict sval);
6 Применение – задача производитель-потребитель void thread1() { while(1) { sem_wait(&a); print(…); sem_post(&b); } void thread2() { while(1) { sem_wait(&b); print(…); sem_post(&a); } sem_init(&a, 0, 0); sem_init(&b, 0, 1);
7 Именованные семафоры cc [ flags] file –lrt [ libraries ] #include sem_t *sem_open(const char *name, int oflag, /* unsigned long mode, unsigned int value */...);
8 sem_open(3RT) Открывает или создает именованный семафор. Флаги – O_CREAT и O_EXCL, аналогичны одноименным флагам open(2) При использовании O_CREAT необходимо передать еще два параметра – маску прав доступа и начальное значение семафора
9 sem_close(3RT) cc [ flags] file –lrt [ libraries ] #include int sem_close(sem_t *sem);
10 sem_close(3RT) Закрывает семафор Неявный sem_close происходит при exit(2), exec(2)
11 Именованные семафоры Всегда разделяемые (доступны для межпроцессного взаимодействия) Должны закрываться sem_close(3RT) Набор операций тот же, что и над неименованным семафором (sem_post(3RT), sem_wait(3RT), sem_trywait(3RT), sem_getvalue(3RT)) Имя должно начинаться с / Имена могут (но не обязаны) быть видны в файловой системе. В Solaris 10 не видны Уничтожаются при помощи sem_unlink(3RT)
12 sem_unlink cc [ flags] file –lrt [ libraries ] #include int sem_unlink(const char * name);
13 sem_unlink Уничтожает имя семафора Семафор уничтожается, когда все процессы, использовавшие его, исполнят sem_close(3rt), exit(2) или exec(2) Sem_unlink не ожидает уничтожения семафора
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.