boost::json::serializer如文档中的示例所示使用- 快速查看以紧凑格式保存 json 树。
有没有办法指示serializer输出人类可读的文件(即带有换行符和空格)?我四处搜寻,但没有发现任何提示。
注意:更好的是以紧凑的格式编写树的较高级别,以及一些对象或数组(可能是标记的)。
缩短的示例代码可能如下所示:
#include <iostream>
#include <boost/json.hpp>
#include <boost/json/src.hpp> // use header-only
using namespace boost;
int main(int /*argc*/, char */*argv*/[]) {
json::value jv = {
{ "pi", 3.141 },
{"list", {1, 0, 2}},
};
json::serializer sr;
sr.reset( &jv );
do {
char buf[ 16 ];
std::cout << sr.read( buf );
} while( ! sr.done() );
}
Run Code Online (Sandbox Code Playgroud)
这(正确地)输出{"pi":3.141E0,"list":[1,0,2]},但我宁愿有:
{
"pi":3.141E0,
"list":
[
1,
0,
2
]
}
Run Code Online (Sandbox Code Playgroud)
或(“NB”版本):
{
"pi":3.141E0, …Run Code Online (Sandbox Code Playgroud) 为什么可以在 a 上获取两个不同的锁std::shared_mutex?
下面的代码
#include <shared_mutex>
#include <iostream>
int main(int /*argc*/, char * /*argv*/[]) {
std::shared_mutex mut;
std::unique_lock<std::shared_mutex> ulock{mut};
if(ulock)
std::cout << "uniqe_lock is bool true\n";
if(ulock.owns_lock())
std::cout << "uniqe_lock owns lock\n";
std::shared_lock<std::shared_mutex> slock{mut};
if(slock)
std::cout << "shared_lock is bool true\n";
if(slock.owns_lock())
std::cout << "shared_lock owns lock\n";
}
Run Code Online (Sandbox Code Playgroud)
当使用g++9.4.0 编译时(当前在 Ubuntu 20.04.1 上可用)
g++ -std=c++17 mutex.cpp
Run Code Online (Sandbox Code Playgroud)
输出所有cout行。即线程获取和。unique_lock shared_lock据我了解cppreference,shared_mutex当第一个锁仍然存在时,获取第二个锁应该失败。
“在一个线程内,同一时间只能获取一把锁(共享锁或独占锁)。”
我在这里想念什么?为什么shared_lock前一个unique_lock仍然有效就可以获取到?