Книга: UNIX: взаимодействие процессов
Упражнения
Упражнения
1. Удалите взаимное исключение из листинга 7.2 и убедитесь, что программа работает неправильно, если одновременно запущено более одного производителя.
2. Что произойдет с листингом 7.1, если убрать вызов Pthread_join для потока-потребителя?
3. Напишите пpoгрaммy, вызывающую pthread_mutexatt_init и pthread_condattr_init в бесконечном цикле. Следите за используемой этим процессом памятью с помощью какой-нибудь программы, например ps. Что происходит? Теперь добавьте вызовы pthread_mutexattr_destroy и pthread_condattr_destroy и убедитесь, что утечки памяти нет.
4. В программе из листинга 7.6 производитель вызывает pthread_cond_signal только при изменении nready.nready с 0 на 1. Чтобы убедиться в эффективности этой оптимизации, вызывайте pthread_cond_signal каждый раз, когда nready.nready увеличивается на 1, и выведите его значение в главном потоке после завершения работы потребителя.
- 7.1. Введение
- 7.2. Взаимные исключения: установка и снятие блокировки
- 7.3. Схема производитель-потребитель
- 7.4. Блокировка и ожидание
- 7.5. Условные переменные: ожидание и сигнализация
- 7.6. Условные переменные: время ожидания и широковещательная передача
- 7.7. Атрибуты взаимных исключений и условных переменных
- 7.8. Резюме
- Упражнения