Question

En bref, est la bibliothèque standard classe Logger dans Ruby thread-safe ? Seule l'information utile Google relevai était quelqu'un sur un forum en disant qu'il « semble » thread-safe. Et je ne me sens pas comme le temps passé à tester un enregistreur pour essayer de savoir si elle est ou non.

Pour le moment, je suis en utilisant log4r qui est thread-safe, mais il est exagéré si la norme bibliothèque fait déjà.

Était-ce utile?

La solution

Un rapide coup d'oeil à logger.rb révèle un code tel que le suivant:

def write(message)
  @mutex.synchronize do
    if @shift_age and @dev.respond_to?(:stat)
      begin
        check_shift_log
      rescue
        raise Logger::ShiftingError.new("Shifting failed. #{$!}")
      end
    end
    @dev.write(message)
  end
end

Ainsi, alors que je ne peux garantir si elle obtient thread-safety correct , je peux confirmer qu'il fait un effort concerté pour le faire bien!

P.S. Il est souvent facile de répondre à des questions comme celle-ci pour vous-même en lisant le code: -)

Autres conseils

Voici ma réponse originale, qui est en fait mauvais . Commentaire de lecture Nemo157 ci-dessous. Je l'ai laissé ici pour référence.

Original:

Je ne pense pas que cela importe. Toutes les implémentations de Ruby que je connais si bien courir efficacement un fil à la fois de toute façon. Il ne vous permet de lancer plusieurs threads, mais seulement un court de fil à la fois par processus

Certaines classes Ruby sont conçus pour être thread-safe, mais ne dit pas explicitement dans les mots d'une syllabe dans leur documentation. Contrairement à la documentation dans d'autres langages de programmation tels que PHP.

Je me souviens avoir demandé si Queue était thread-safe sur débordement de la pile, et même si elle était, la documentation n'a pas précisé cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top