Приведенный ниже код представляет собой упрощенную версию из учебника (драйверы устройств Linux, ядро 4.0): < /p>
while (dev->current_len == 0) {
if (filp->f_flags & O_NONBLOCK) {
ret = -EAGAIN;
goto out;
}
__set_current_state(TASK_INTERRUPTIBLE);
mutex_unlock(&fifo_mutex);
schedule();
if (signal_pending(current)) {
ret = -ERESTARTSYS;
goto out2;
}
Забот о тупике: < /strong> Код сначала устанавливает состояние задачи на Task_retemble и только затем выпускает Mutex. Я беспокоюсь о том, что после первой строки (__Set_current_state) процесс может быть превзойден планировщиком, прежде чем он сможет вызвать mutex_unlock (). Если это произойдет, процесс будет в состоянии сна при удержании замка. Это приведет к тупику, так как процесс написания (который нуждается в замке, чтобы разбудить читателя) не сможет его приобрести. Это действительная проблема? Если да, то какой правильный атомный способ справиться с этим? Все они тогда будут участвовать в гонках, чтобы приобрести мутекс. Похоже, это классическая проблема «громового стада», что приводит к потраченным впустую циклам процессора и несправедливому распределению ресурсов. Это правильная оценка проблемы? Если да, то какой рекомендуемый способ разбудить только один процесс ожидания, гарантируя, что только один читатель получает данные, а другие остаются спать?
Приведенный ниже код представляет собой упрощенную версию из учебника (драйверы устройств Linux, ядро 4.0): < /p> while (dev->current_len == 0) { if (filp->f_flags & O_NONBLOCK) { ret = -EAGAIN; goto out; } __set_current_state(TASK_INTERRUPTIBLE); mutex_unlock(&fifo_mutex); schedule(); if (signal_pending(current)) { ret = -ERESTARTSYS; goto out2; }
mutex_lock(&fifo_mutex); } < /code> Мои вопросы: < /p> [list] [*] Забот о тупике: < /strong> Код сначала устанавливает состояние задачи на Task_retemble и только затем выпускает Mutex. Я беспокоюсь о том, что после первой строки (__Set_current_state) процесс может быть превзойден планировщиком, прежде чем он сможет вызвать mutex_unlock (). Если это произойдет, процесс будет в состоянии сна при удержании замка. Это приведет к тупику, так как процесс написания (который нуждается в замке, чтобы разбудить читателя) не сможет его приобрести. Это действительная проблема? Если да, то какой правильный атомный способ справиться с этим? Все они тогда будут участвовать в гонках, чтобы приобрести мутекс. Похоже, это классическая проблема «громового стада», что приводит к потраченным впустую циклам процессора и несправедливому распределению ресурсов. Это правильная оценка проблемы? Если да, то какой рекомендуемый способ разбудить только один процесс ожидания, гарантируя, что только один читатель получает данные, а другие остаются спать?
У меня есть простой запрос с шагом, который записывает до 10 раз в секунду за таблицу (разные строки), он делает это весь день, 7 дней в неделю, в течение всего года.
Ошибка времени, в течение дня он кашляет несколько «Mysql Server». Решено....
Попытка адаптироваться к протоколу, сгенерированному из мультипланома Kotlin в Objective-C, подвергнутом воздействию Swift. Я изучаю быструю параллелизенту и не уверен, как подходить к этому. __attribute__((swift_name( Test )))
@protocol...
Я в некотором смысле. Я только недавно (на прошлой неделе) устроился на работу более свежей (не имел реального опыта программирования 6 месяцев назад), чтобы теперь они передали мне живой проект (в Python) для оптимизации WebSocket и общего потока...
Я работаю над вопросом о домашнем задании (конец этого PDF):
Код:
В главе32, домашнее задание 8, он использует глобальный замок для предотвращения тупика. Кодовый вектор-avoid-hold и wait.c ниже:
void vector_add(vector_t *v_dst, vector_t *v_src)...
Я хочу использовать одно имя пакета в двух разных проектах Android. Как я могу?
Я только что попробовал, но получил ошибку и не могу установить эти два приложения проекта на свой мобильный телефон, одновременно мне нужно uniStall одно, чтобы...