Presentation is loading. Please wait.

Presentation is loading. Please wait.

Семафоры-счетчики POSIX Программирование с использованием POSIX thread library.

Similar presentations


Presentation on theme: "Семафоры-счетчики POSIX Программирование с использованием POSIX thread library."— Presentation transcript:

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 не ожидает уничтожения семафора


Download ppt "Семафоры-счетчики POSIX Программирование с использованием POSIX thread library."

Similar presentations


Ads by Google