c ++中的线程序列化是什么意思?

pok*_*che 10 c c++ multithreading pthreads

我知道序列化对象以及如何将它们保存到磁盘,但线程序列化实际上意味着什么?有没有人可以帮我解决这个问题并指出我正确的方向?

amd*_*mdn 13

你是对的,这是两个不同的含义serialization.您熟悉数据序列化,即将数据结构转换为某些规范表示中的字节流.在多线程中,术语序列化意味着线程或进程同步的互斥,这意味着一次只有一个线程可以对数据结构进行操作.C++ 11提供了使用a的线程之间的序列化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;
}
Run Code Online (Sandbox Code Playgroud)

这是资源获取初始化(RAII)的示例,其中资源被同时获取和初始化,并且当它超出范围时被释放(执行达到紧密的大括号).这是一种常见的习惯用法,它确保即使代码在到达块结束之前抛出异常,也会释放互斥锁.


Nts*_*alt 7

Serialize实际上意味着以串行形式发布,就像一个接一个地发布.因此,线程序列化意味着确保某个事件集不是同时发生在序列中

因此,具有序列化线程访问权限的堆意味着对堆的调用将按其生成的顺序进行,并且实际上不会同时发生.这可能是通过全局锁来完成的.