# lock-strategies

Tag: lock-strategies

[since 2.0]

Defines a list of lock strategies usable in Ivy.

A lock strategy is used by a cache manager to decide when and how locking should be performed (see caches to see how to configure the lock strategy to use).

The following strategies are registered by default:

- no-lock
  This lock strategy actually performs no locking at all, and thus should not be used in an environment where the cache is shared by multiple processes.

- artifact-lock
  This strategy acquires a lock whenever a module descriptor or an artifact is downloaded to the cache, which makes a good solution when you want to share your repository cache. Note that this strategy is based on file locking, performed by default using the `java.io.File.createNewFile()` atomicity (which is documented as atomic in the javadoc, but not recommended to perform locks).

- artifact-lock-nio (since 2.4)
  Like the `artifact-lock` strategy, this one also acquires a lock whenever a module descriptor or artifact is downloaded to the cache. But here the implementation is done with a `java.nio.FileLock`.

The child tag used for the lock strategy must be equal to a name of a lock strategy type (added with the `typedef` tag).

## Child elements

Element | Description | Cardinality
--- | --- | ---
any lock strategy | adds a lock strategy to the list of available ones | 0..n