SlideServe
Menu
Préférences
© SlideServe · v2026

Семафоры-счетчики POSIX

nerita avatar
13 diapositives · 439 Views · Oct 23, 2014

Семафоры-счетчики POSIX. Программирование с использованием POSIX thread library. Семафоры-счетчики. POSIX Realtime Extension (1003.1b-1993/1003.1i-1995) Сборка в Solaris требует ключа –lrt В Linux включены в libpthread.so. Неименованные семафоры. cc [ flags] file –lrt [ libraries ]

Семафоры-счетчики POSIX - slide 1
01 / 13Семафоры-счетчики POSIX
1 / 17

Télécharger la présentation

Семафоры-счетчики POSIX
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  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 <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem);

  4. Операции над семафорами cc [ flags] file –lrt [ libraries ] #include <semaphore.h> 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 <semaphore.h> int sem_getvalue( sem_t *restrict sem, int *restrict sval);

  6. Применение – задача производитель-потребитель void thread1() { while(1) { sem_wait(&a); print(…); sem_post(&b); } } sem_init(&a, 0, 0); sem_init(&b, 0, 1); void thread2() { while(1) { sem_wait(&b); print(…); sem_post(&a); } }

  7. Именованные семафоры cc [ flags] file –lrt [ libraries ] #include <semaphore.h> 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 <semaphore.h> 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 <semaphore.h> int sem_unlink(const char * name);

  13. sem_unlink • Уничтожает имя семафора • Семафор уничтожается, когда все процессы, использовавшие его, исполнят sem_close(3rt), exit(2) или exec(2) • Sem_unlink не ожидает уничтожения семафора