thread_pool_start(tpp);
fprintf(stderr,
"%s: возврат из thread_pool_start; errno %s\n",
progname, strerror(errno));
sleep(3000);
exit(EXIT_FAILURE);
}
После установки параметров мы вызываем функцию
Я указал флаг POOL_FLAG_USE_SELF, что означает, что поток, вызвавший функцию
Пусть далее разблокируется еще несколько потоков. Давайте предположим, что на этот момент еще ни один из потоков, находящихся в режиме обработки, еще не завершил свои дела. Ниже приведена таблица, в которой иллюстрируется весь процесс, начиная с исходного состояния:
Событие | Режим обработки | Режим блокирования | Всего потоков |
---|---|---|---|
Исходное состояние | 0 | 1 | 1 |
Срабатывание триггера | 0 | 3 | 3 |
Разблокирование | 1 | 2 | 3 |
Срабатывание триггера | 1 | 4 | 5 |
Разблокирование | 2 | 3 | 5 |
Разблокирование | 3 | 2 | 5 |
Срабатывание триггера | 3 | 4 | 7 |
Разблокирование | 4 | 3 | 7 |
Разблокирование | 5 | 2 | 7 |
Срабатывание триггера | 5 | 4 | 9 |
Разблокирование | 6 | 3 | 9 |
Разблокирование | 7 | 2 | 9 |
Срабатывание триггера | 7 | 3 | 10 |
Разблокирование | 8 | 2 | 10 |
Разблокирование | 9 | 1 | 10 |
Разблокирование | 10 | 0 | 10 |
Видно, что библиотека проверяет параметр
Это означает, что однажды наступает момент, когда потоков в режиме блокирования больше не остается. Предположим теперь, что потоки, находящиеся в режиме обработки, завершают свои дела. Посмотрим, что при этом произойдет с триггером параметра
Событие | Режим обработки | Режим блокирования | Всего потоков |
---|---|---|---|
Завершение обработки | 9 | 1 | 10 |
Завершение обработки | 8 | 2 | 10 |
Завершение обработки | 7 | 3 | 10 |
Завершение обработки | 6 | 4 | 10 |
Завершение обработки | 5 | 5 | 10 |
Завершение обработки | 4 | 6 | 10 |
Завершение обработки | 3 | 7 | 10 |
Завершение обработки | 2 | 8 | 10 |
Срабатывание триггера | 2 | 7 | 9 |
Завершение обработки | 1 | 8 | 9 |
Срабатывание триггера | 1 | 7 | 9 |
Завершение обработки | 0 | 8 | 8 |
Срабатывание триггера | 0 | 7 | 7 |
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT