Хорошо кажется, что первый пункт маркированного списка допускает многопоточный (или единственный распараллелил, если Вы завинчиваете), приложения для не блокировки набора для нарушений параллелизма. В.NET, например, Вы не можете перечислить и изменить набор (или список или любой IEnumerable) одновременно, не блокируя или наследовавшись IEnumerable и методам переопределения (мы получаем исключения).
Это невозможно. Если возвращаемое значение не задано, функция автоматически возвращает null.
Вы можете заставить функцию возвращать другое значение? Логическое значение, возможно, истинно, и проверьте его или значение null.