我知道序列化对象以及如何将它们保存到磁盘,但是线程序列化实际上意味着什么?有人可以帮我解决这个问题并指出我正确的方向吗?
问问题
5120 次
3 回答
17
您是对的,这是 的两种不同含义serialization
。您熟悉数据序列化,即将数据结构转换为某种规范表示的字节流。在多线程中,术语序列化意味着线程或进程同步的互斥,这意味着一次只能有一个线程对数据结构进行操作。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;
}
这是资源获取即初始化 (RAII)的示例,其中资源被同时获取和初始化,并在超出范围时释放(执行到达大括号)。这是一个常见的习惯用法,它确保即使代码在到达块末尾之前抛出异常,也会释放互斥锁。
于 2013-02-01T20:34:49.843 回答
8
Serialize实际上是指以连续的形式发布,如一个接一个。所以线程序列化意味着确保某组事件不是同时发生在一个序列中
因此,具有序列化线程访问的堆意味着对堆的调用将按照它们进行的顺序发生,并且实际上不会同时发生。这可能是通过全局锁来完成的。
于 2013-02-01T20:19:50.713 回答
2
在不知道您被告知的具体上下文的情况下,我猜它是指开发使用消息队列来模拟多线程系统的单线程应用程序。
这让我回到了过去玩CircleMUD衍生产品的日子。整个游戏是在一个线程中实现的,但它必须同时处理 50-100 名玩家。我很惊讶他们是如何做到这一点的。
于 2013-02-01T20:21:10.597 回答