Безопасность потока достигается за счет использования любых примитивов синхронизации, которые обеспечивает реализация многопоточности.
Возможно, вашей начальной точкой будет связанный список событий, блокировка, которая его защищает, и каждый поток получает блокировку, потребляя однусобытие, регулируя указатель на первое событие, а затем снимает блокировку;добавление событий также блокирует весь список.Когда список пуст, рабочие выходят.
Оттуда возможны различные варианты оптимизации:
- Кэширование указателя на последнее событие, поэтому добавление события в список становится дешевле.
- Добавление механизма уведомления, чтобы рабочие потоки могли спать, пока список пуст.Как правило, это достигается с помощью так называемой условной переменной 1011 *.
- Использование нескольких списков, поэтому, если первый список заблокирован, работник может извлечь событие из другого списка, не дожидаясьпоток, который в данный момент заблокировал список.