The following solutions may be helpful in preventing deadlocks.
Shareable resources: If a system has resources that can be shared between a number of processes, then it will allow multiple processes to execute at the same time, thus preventing deadlock.
Avoid hold and wait by pre-empting resources. A process must leave its acquired resources, if higher priority process demands the access to resources.
Resource Allocation Graph, a solution to circular wait. In this, processes are assigned a number and they can access the resources according to the priority number.
Elimiation of Hold and Wait, by giving the processes all the resources in advance, i.e. before they start executing. But this will lead to wastage of resources and starvation may be possible.