In the shared-memory programming model, tasks share a common address space, which they read and write asynchronously. Several mechanisms such as locks / semaphores may be used to control access to the shared memory. A benefit of this model from the programmer's point of view is that program development can often be simplified. An important drawback of this model (in terms of performance) is that for this model, data management is hard.