Class: Concurrent::Semaphore

Inherits:
SemaphoreImplementation
  • Object
show all
Defined in:
lib/concurrent/atomic/semaphore.rb

Overview

A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each #acquire blocks if necessary until a permit is available, and then takes it. Each #release adds a permit, potentially releasing a blocking acquirer. However, no actual permit objects are used; the Semaphore just keeps a count of the number available and acts accordingly.

Instance Method Summary collapse

Constructor Details

#initialize(count) ⇒ Object

Create a new ‘Semaphore` with the initial `count`.

Parameters:

  • count (Fixnum)

    the initial count

Raises:

  • (ArgumentError)

    if ‘count` is not an integer or is less than zero



111
112
# File 'lib/concurrent/atomic/semaphore.rb', line 111

class Semaphore < SemaphoreImplementation
end

Instance Method Details

#acquire(permits = 1) ⇒ nil

Acquires the given number of permits from this semaphore,

blocking until all are available.

Parameters:

  • permits (Fixnum) (defaults to: 1)

    Number of permits to acquire

Returns:

  • (nil)

Raises:

  • (ArgumentError)

    if ‘permits` is not an integer or is less than one



111
112
# File 'lib/concurrent/atomic/semaphore.rb', line 111

class Semaphore < SemaphoreImplementation
end

#available_permitsInteger

Returns the current number of permits available in this semaphore.

Returns:

  • (Integer)


111
112
# File 'lib/concurrent/atomic/semaphore.rb', line 111

class Semaphore < SemaphoreImplementation
end

#drain_permitsInteger

Acquires and returns all permits that are immediately available.

Returns:

  • (Integer)


111
112
# File 'lib/concurrent/atomic/semaphore.rb', line 111

class Semaphore < SemaphoreImplementation
end

#release(permits = 1) ⇒ nil

Releases the given number of permits, returning them to the semaphore.

Parameters:

  • permits (Fixnum) (defaults to: 1)

    Number of permits to return to the semaphore.

Returns:

  • (nil)

Raises:

  • (ArgumentError)

    if ‘permits` is not a number or is less than one



111
112
# File 'lib/concurrent/atomic/semaphore.rb', line 111

class Semaphore < SemaphoreImplementation
end

#try_acquire(permits = 1, timeout = nil) ⇒ Boolean

Acquires the given number of permits from this semaphore,

only if all are available at the time of invocation or within
`timeout` interval

Parameters:

  • permits (Fixnum) (defaults to: 1)

    the number of permits to acquire

  • timeout (Fixnum) (defaults to: nil)

    the number of seconds to wait for the counter or ‘nil` to return immediately

Returns:

  • (Boolean)

    ‘false` if no permits are available, `true` when acquired a permit

Raises:

  • (ArgumentError)

    if ‘permits` is not an integer or is less than one



111
112
# File 'lib/concurrent/atomic/semaphore.rb', line 111

class Semaphore < SemaphoreImplementation
end