我正在用 D 编程语言编写一个多线程程序,但对这种语言还是很陌生。Tid.send()
使用包中的和receive[Only]()
API 在线程之间传递的类型有一个限制,std.concurrency
即它们必须是值类型或必须是常量,以避免发送者和接收者线程之间的竞争条件。我有一个简单的struct Message
类型,我一直按值传递:
enum MessageType {
PrepareRequest,
PrepareResponse,
AcceptRequest,
Accepted
}
struct Message {
MessageType type;
SysTime timestamp;
uint node;
ulong value;
}
但是,有些MessageType
s 并没有所有的字段,而且当我可以使用多态性自动完成这项工作时,使用 switch 语句并记住哪些类型具有哪些字段是很烦人的。是使用immutable
这里推荐的类层次结构,还是我已经在使用最好的方法,为什么?
编辑
另外,如果我应该使用不可变类,那么创建用户定义类的不可变对象的推荐方法是什么?它们来自的类的静态方法将返回值转换为immutable
?