The prevalent system class must be serializable and deterministic: two instances of the same class when exposed to the same set of commands and queries must reach the same final state and yield the same query results.
In order to be deterministic, the prevalent system class must use PrevalenceEngine.Clock or PrevalenceEngine.Now for all its date/time related functions.
Any change to the prevalent system must be represented by a serializable command object (ICommand) executed through ExecuteCommand.
Queries to the prevalent system are best implemented as query objects (IQuery) executed through ExecuteQuery.
The prevalence engine employs a reader/writer lock strategy to coordenate the work of command and query objects - that way multiple query objects are allowed to execute in paralell and command objects are only allowed to execute one by one.
The great news is that if you design your prevalent system in such a way that its state is only manipulated and queried through command and query objects you don't have to worry about synchronization, to a simple example of such a system please refer to the Bamboo.Prevalence.Tests project.
Optionally, if you don't like the idea of designing your system around command and query objects and would rather use simple method calls onto your prevalent system class, take a look at PrevalenceActivator.CreateTransparentEngine or Bamboo.Prevalence.Attributes.TransparentPrevalenceAttribute.