您好,登錄后才能下訂單哦!
在C++中,使用序列化庫(如Boost.Serialization、cereal等)進行多線程序序列化時,需要確保同步以避免數據競爭和不一致
#include <iostream>
#include <thread>
#include <mutex>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <sstream>
class Data {
public:
int value;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & value;
}
};
std::mutex mtx; // 全局互斥鎖
void serializeData(const Data &data, std::stringstream &ss) {
std::lock_guard<std::mutex> lock(mtx); // 加鎖
boost::archive::text_oarchive oa(ss);
oa << data;
}
void deserializeData(Data &data, std::stringstream &ss) {
std::lock_guard<std::mutex> lock(mtx); // 加鎖
boost::archive::text_iarchive ia(ss);
ia >> data;
}
int main() {
// ... 多線程環境下調用serializeData和deserializeData
}
#include <iostream>
#include <thread>
#include <shared_mutex>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <sstream>
class Data {
public:
int value;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & value;
}
};
std::shared_mutex sharedMutex; // 全局讀寫鎖
void serializeData(const Data &data, std::stringstream &ss) {
std::unique_lock<std::shared_mutex> lock(sharedMutex); // 寫鎖
boost::archive::text_oarchive oa(ss);
oa << data;
}
void deserializeData(Data &data, std::stringstream &ss) {
std::shared_lock<std::shared_mutex> lock(sharedMutex); // 讀鎖
boost::archive::text_iarchive ia(ss);
ia >> data;
}
int main() {
// ... 多線程環境下調用serializeData和deserializeData
}
注意:在這些示例中,我們使用了全局鎖。在實際應用中,您可能需要根據需求調整鎖的范圍。例如,您可以為每個數據對象分配一個鎖,而不是使用全局鎖。這將減少鎖的粒度,從而提高性能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。