2014-04-06 5 views
3

Как превентивное ядро ​​приводит к условиям гонки? если процесс выгружен, т. е. не выкинут из его критической секции. из моего понимания состояния гонки, когда несколько процессов пытаются получить доступ и управлять ресурсами одновременно. У меня проблемы с пониманием концепцииУстранение проблем упреждающего ядра

ответ

1

Упреждающее ядро ​​может запускать и останавливать потоки в любой точке. Это означает, что потоки, которые не тщательно координируют их доступ через блокировки и критические разделы, попадают в условия гонки.

Другая форма многопоточности представляет собой совместную многопоточность, где потоки могут быть остановлены только в тех точках, где они явно предлагают получить процессор. Это помогает предотвратить условия гонки, потому что потоки не прерываются в случайных неожиданных точках при их обработке.

Недостатком кооперативной многопоточности является то, что поток, написанный не для того, чтобы уступить, может привести к зависанию процессора, и именно поэтому большинство современных операционных систем используют превентивную многопоточность, а не совместную многопоточность.

+0

Основным недостатком кооперативной многопоточности является ужасно плохая производительность ввода-вывода, поскольку потоки не могут быть готовы/запущены «немедленно», когда запрашиваемые ранее запросы ввода-вывода становятся доступными. –

+0

@warren спасибо. так и может ли невосприимчивость привести к голоду? – user3497437

+0

@ user3497437 Совместная многопоточность может привести к голоданию других потоков, когда работающий поток не сработает, да. –

Смежные вопросы