Partially thread-safe dictionary

前端 未结 4 1441
野性不改
野性不改 2021-01-20 15:16

I have a class that maintains a private Dictionary instance that caches some data.

The class writes to the dictionary from multiple threads using a

4条回答
  •  孤独总比滥情好
    2021-01-20 15:36

    I want to expose the dictionary's values outside the class. What is a thread-safe way of doing that?

    You have three choices.

    1) Make a copy of the data, hand out the copy. Pros: no worries about thread safe access to the data. Cons: Client gets a copy of out-of-date data, not fresh up-to-date data. Also, copying is expensive.

    2) Hand out an object that locks the underlying collection when it is read from. You'll have to write your own read-only collection that has a reference to the lock of the "parent" collection. Design both objects carefully so that deadlocks are impossible. Pros: "just works" from the client's perspective; they get up-to-date data without having to worry about locking. Cons: More work for you.

    3) Punt the problem to the client. Expose the lock, and make it a requirement that clients lock all views on the data themselves before using it. Pros: No work for you. Cons: Way more work for the client, work they might not be willing or able to do. Risk of deadlocks, etc, now become the client's problem, not your problem.

提交回复
热议问题