我知道序列化对象以及如何将它们保存到磁盘,但线程序列化实际上意味着什么?有没有人可以帮我解决这个问题并指出我正确的方向?
答案 0 :(得分:12)
你是对的,这是serialization
的两个不同含义。您熟悉data serialization,它将数据结构转换为某些规范表示中的字节流。在多线程中,术语序列化意味着mutual exclusion thread or process synchronization,这意味着一次只有一个线程可以在数据结构上运行。 C ++ 11使用std::mutex
#include <mutex>
std::mutex file_io_mutex;
{
std::lock_guard<std::mutex> guard(file_io_mutex);
std::out << "Only one thread at a time will execute this line." << std::endl;
}
这是Resource Acquisition Is Initialization (RAII)的示例,其中资源被同时获取和初始化,并在超出范围时被释放(执行达到关闭的大括号)。这是一个常见的习惯用法,它确保即使代码在到达块结束之前抛出异常,也会释放互斥锁。
答案 1 :(得分:7)
Serialize实际上意味着以串行形式发布,就像一个接一个地发布。因此,线程序列化意味着确保某个事件集不是同时发生在序列中
因此,具有序列化线程访问权限的堆意味着对堆的调用将按其生成的顺序进行,并且实际上不会同时发生。这可能是通过全局锁定来完成的。
答案 2 :(得分:2)
在不知道您被告知这个特定上下文的情况下,我想它是指使用消息队列开发模拟多线程系统的单线程应用程序。
这让我回到过去玩CircleMUD衍生物的过去。整个游戏都在一个线程中实现,但它必须同时处理50-100名的玩家。我对他们如何实现这一点感到非常惊讶。