Where should I put a resource lock, close to the resource being shared or up in the call stack? What is the best practice?

For example:

```
class A
{
    private List<string> List = new List<string>();

    public void Add
    {
        this.list.Add("test");
    }
}

```

Should I lock inside the Add method or should I lock in the clients calling the Add method so only one is called each time?

Thanks.

**EDIT:** I'm the owner of the calling code and the A class, with clients I mean higher layer calls.