#if !defined(__cpp_lib_uncaught_exceptions) && !defined(_MSC_VER) || \
(_MSC_VER < 1900)
#define __cpp_lib_uncaught_exceptions 201411
namespace std
{
int
uncaught_exceptions() noexcept
{
return 0;
}
}
#endif
#include <libpmemobj++/make_persistent.hpp>
#include <libpmemobj++/mutex.hpp>
#include <libpmemobj++/persistent_ptr.hpp>
#include <libpmemobj++/pext.hpp>
#include <libpmemobj++/pool.hpp>
#include <libpmemobj++/shared_mutex.hpp>
#include <libpmemobj++/transaction.hpp>
using namespace pmem::obj;
void
general_tx_example()
{
struct root {
mutex pmutex;
shared_mutex shared_pmutex;
p<int> count;
persistent_ptr<root> another_root;
};
auto pop = pool<root>::create("poolfile", "layout", PMEMOBJ_MIN_POOL);
auto proot = pop.get_root();
try {
transaction::exec_tx(pop,
[&]() {
proot->another_root =
make_persistent<root>();
proot->count++;
},
proot->pmutex, proot->shared_pmutex);
} catch (pmem::transaction_error &te) {
} catch (...) {
}
}
#include <libpmemobj++/make_persistent.hpp>
#include <libpmemobj++/mutex.hpp>
#include <libpmemobj++/persistent_ptr.hpp>
#include <libpmemobj++/pext.hpp>
#include <libpmemobj++/pool.hpp>
#include <libpmemobj++/shared_mutex.hpp>
#include <libpmemobj++/transaction.hpp>
using namespace pmem::obj;
int
manual_tx_example()
{
struct root {
mutex pmutex;
shared_mutex shared_pmutex;
p<int> count;
persistent_ptr<root> another_root;
};
auto pop = pool<root>::create("poolfile", "layout", PMEMOBJ_MIN_POOL);
auto proot = pop.get_root();
try {
transaction::manual tx(pop, proot->pmutex,
proot->shared_pmutex);
proot->another_root = make_persistent<root>();
proot->count++;
transaction::commit();
} catch (pmem::transaction_error &te) {
} catch (...) {
}
return transaction::get_last_tx_error();
}
#include <libpmemobj++/make_persistent.hpp>
#include <libpmemobj++/mutex.hpp>
#include <libpmemobj++/persistent_ptr.hpp>
#include <libpmemobj++/pext.hpp>
#include <libpmemobj++/pool.hpp>
#include <libpmemobj++/shared_mutex.hpp>
#include <libpmemobj++/transaction.hpp>
using namespace pmem::obj;
int
automatic_tx_example()
{
struct root {
mutex pmutex;
shared_mutex shared_pmutex;
p<int> count;
persistent_ptr<root> another_root;
};
auto pop = pool<root>::create("poolfile", "layout", PMEMOBJ_MIN_POOL);
auto proot = pop.get_root();
try {
transaction::automatic tx(pop, proot->pmutex,
proot->shared_pmutex);
proot->another_root = make_persistent<root>();
proot->count++;
} catch (pmem::transaction_error &te) {
} catch (...) {
}
return transaction::get_last_tx_error();
}