retornos de rendimento na instrução lock

se eu tiver um retorno de rendimento em uma instrução de bloqueio, o bloqueio é retirado em cada rendimento (5 vezes no exemplo abaixo) ou apenas uma vez para todos os itens da lista?

obrigado

    private List<string> _data = new List<string>(){"1","2","3","4","5"};
    private object _locker =new object();
    public IEnumerable<string> GetData()
    {
        lock (_locker)
        {
            foreach (string s in _data)
            {
                yield return s;
            }
        }
    }

questionAnswers(3)

yourAnswerToTheQuestion