【发布时间】:2015-11-17 15:27:20
【问题描述】:
作为 API 设计者,执行锁检查以确保对象状态不会被调用者无效是否有意义?
考虑一个Grid3D 数据结构,它必须在每次更改其Width、Heigth 或Depth 时自行调整大小。如果调用者正在从多个线程修改Grid3D,则Grid 可能会在尝试重新调整大小时调整大小,这会使对象状态无效或引发异常。
这可以通过使用锁为 resize 函数提供互斥来克服,它可能发生在 API 中(即Grid3D 的类定义),也可能发生在Grid3D 所在的应用程序中被使用了。
如果在Grid3D 类定义中加锁是正确的,这就是说所有API 开发都应该考虑线程同步。在许多情况下(当然包括 StackOverflow 在内的许多在线示例)不考虑 API 级类中的同步。
那么,执行锁定的正确位置在哪里? API 级别在什么情况下应该关注锁定?
【问题讨论】:
-
奇怪,这个话题太宽泛了,实际上我错过了任何细节。所以我们实际上可以用 20 种不同的方式来回答这个问题,它们都是正确的。这就像问,明天是否会是美好而闪亮的一天,而不是指定任何位置:)。
标签: c# .net multithreading thread-safety locking