Я хочу реализовать быстрый регистратор, содержащий записи журнала, и когда приходит определенный триггер, он очищает последние X-сообщения.Могу ли я «заставить» поток проснуться?
Итак, идея состоит в том, чтобы удерживать все сообщения в циклическом буфере, и как только у нас есть триггер, нажмите его идентификатор в очередь, который отслеживает другой поток (один поток во всей системе). этот поток будет возвращать X-сообщения и стирать их. Я знаю, как обрабатывать сообщения, которые пишутся во время попытки очистки, сообщения, которые были перезаписаны, до того, как я сбросил сообщения, которые были очищены, когда я пытаюсь их обновить.
Моя проблема в том, У меня есть 20 потоков, пишущих сообщения, и всего 10 ядер, во время пословицы между исполнением потока 2 «писателя» весь буфер будет перезаписан несколько раз.
Есть ли способ, которым «моя» нить может «заставлять» нить «писателя» выполнить (или дать ей время среза? Я думаю, нет, но все еще ... вы можете советовать любым другим способом/дизайн, чтобы решить эту проблему.
Зависит, но при одновременном многократном обращении к жесткому диску будет насыщаться скоростью жесткого диска задолго до того, как он насытит скорость обработки процессора. Для простоты, у меня было бы только 1 написать поток: - /. В любом случае, мьютексы или блокировки файлов были бы полезны для обеспечения доступа только 1 (fifo) потока к буферам или месту записи. – IdeaHat
@MadScienceDreams: да, у меня есть один автор (обновленный вопрос соответственно). но проблема остается, буфер перезаписывается до того, как писатель получит возможность сбросить его. – yosim
Вы можете дать этому потоку более высокий приоритет, так как он будет сигнализирован (через условную переменную, мьютекс, семафор, блокировку читателей-писателей, независимо от того, что вы хотите), системный планировщик выполнил бы этот поток. Обратите внимание, что ваша проблема может быть лучше решена с лучшим дизайном. Если ваш буфер будет перезаписан без вашего контроля, вам необходимо пересмотреть механизм ведения журнала. – Shahbaz