    def set_and_notify(value)
      @mutex.synchronize do
        @value = value

        @observers.each do |observer, persistent|
          if !observer.alive?
            debug { "dead: #{observer}" }

            @observers.delete(observer)

          elsif !persistent
            debug { "notify and drop: #{observer} <- #{value}" }

            observer << Message.new(observer, self, value)

            @observers.delete(observer)

          else
            debug { "notify: #{observer} <- #{value}" }

            observer << Message.new(observer, self, value)
          end
        end
      end
    end