Hello everyone,


Here is my code for review to see whether it is thread-safety. My question is, after remove the object instance from List buffer, I exit the lock synchronization block in method RemoveAndUseItem, is it thread safe to exit the lock synchronization and call method RemoveAndUseItem (method RemoveAndUseItem will only touch the removed instance)?

Code:
        List<Foo> Buffer;
        object ListLock = new object();

        void AddItem(Foo f)
        {
            lock (ListLock)
            {
                Buffer.Add(f);
            }
        }

        void RemoveAndUseItem()
        {
            Foo LastItem;
            lock (ListLock)
            {
                LastItem = Buffer[Buffer.Count - 1];
                Buffer.RemoveAt(Buffer.Count - 1);
            }

            // no lock here? safe?
            SafeUseItem(LastItem);

            return;

        }

        void SafeUseItem(Foo f)
        {
            // use f here without synchronization control
        }

thanks in advance,
George