Update descriptor is helping data structure with short lifetime and it is good candidate
for pooling. The number of simultaneously existing descriptors is bounded and it is
- limited the number of threads working with the tree.
+ limited by number of threads working with the tree.
Therefore, a bounded lock-free container like \p cds::container::VyukovMPMCCycleQueue
- is good choice for the free-list of update descriptors,
+ is a good choice for the free-list of update descriptors,
see \p cds::memory::vyukov_queue_pool free-list implementation.
Also notice that size of update descriptor is constant and not dependent on the type of data
CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat, key_type, value_type ) \
CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy, key_type, value_type ) \
CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat, key_type, value_type ) \
+ CDSSTRESS_BronsonAVLTreeMap_SHRCU( fixture, test_case, key_type, value_type )
#else
# define CDSSTRESS_BronsonAVLTreeMap_1( fixture, test_case, key_type, value_type )
CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy, key_type, value_type ) \
CDSSTRESS_BronsonAVLTreeMap_case( fixture, test_case, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat, key_type, value_type ) \
CDSSTRESS_BronsonAVLTreeMap_1( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_BronsonAVLTreeMap_SHRCU( fixture, test_case, key_type, value_type )
} // namespace map
CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpi, key_type, value_type ) \
CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpb_yield, key_type, value_type ) \
CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpi_stat, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeMap_SHRCU( fixture, test_case, key_type, value_type ) \
#else
# define CDSSTRESS_EllenBinTreeMap_HP_1( fixture, test_case, key_type, value_type )
CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpb_stat, key_type, value_type ) \
CDSSTRESS_EllenBinTreeMap_case( fixture, test_case, EllenBinTreeMap_rcu_gpt_stat, key_type, value_type ) \
CDSSTRESS_EllenBinTreeMap_RCU_1( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeMap_SHRCU( fixture, test_case, key_type, value_type ) \
#define CDSSTRESS_EllenBinTreeMap( fixture, test_case, key_type, value_type ) \
CDSSTRESS_EllenBinTreeMap_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_fixed_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_fixed_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_fixed_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type )
+
+ //CDSSTRESS_FeldmanHashMap_fixed_SHRCU( fixture, test_case, key_type, value_type )
#define CDSSTRESS_FeldmanHashMap_fixed( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_fixed_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_stdhash_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_stdhash_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_stdhash_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type )
+
+ //CDSSTRESS_FeldmanHashMap_stdhash_SHRCU( fixture, test_case, key_type, value_type )
#define CDSSTRESS_FeldmanHashMap_stdhash( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_stdhash_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city64_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city64_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city64_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
+
+ //CDSSTRESS_FeldmanHashMap_city64_SHRCU( fixture, test_case, key_type, value_type )
# define CDSSTRESS_FeldmanHashMap_city64( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_city64_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpi_city128_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpb_city128_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_case( fixture, test_case, FeldmanHashMap_rcu_gpt_city128_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
+
+ //CDSSTRESS_FeldmanHashMap_city128_SHRCU( fixture, test_case, key_type, value_type )
# define CDSSTRESS_FeldmanHashMap_city128( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashMap_city128_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPB_cmp, key_type, value_type ) \
CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPI_less, key_type, value_type ) \
CDSSTRESS_MichaelMap_case( fixture, test_case, MichaelMap_Lazy_RCU_GPT_less, key_type, value_type ) \
+ \
+ CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type ) \
# define CDSSTRESS_MichaelMap_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelMap_HP_1( fixture, test_case, key_type, value_type ) \
\
CDSSTRESS_MichaelMap_RCU_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelMap_RCU_2( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_MichaelMap_SHRCU( fixture, test_case, key_type, value_type ) \
#define CDSSTRESS_MichaelMap( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelMap_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpi_cmp_xorshift, key_type, value_type ) \
CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_cmp_xorshift, key_type, value_type ) \
CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpb_cmp_xorshift_stat, key_type, value_type ) \
+ CDSSTRESS_SkipListMap_SHRCU( fixture, test_case, key_type, value_type )
# define CDSSTRESS_SkipListMap_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListMap_HP_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListMap_case( fixture, test_case, SkipListMap_rcu_gpt_cmp_xorshift_stat, key_type, value_type ) \
CDSSTRESS_SkipListMap_RCU_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListMap_RCU_2( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_SkipListMap_SHRCU( fixture, test_case, key_type, value_type )
#define CDSSTRESS_SkipListMap( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListMap_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less, key_type, value_type ) \
CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less, key_type, value_type ) \
CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat, key_type, value_type ) \
+ CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type ) \
# define CDSSTRESS_SplitListMap_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListMap_HP_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat, key_type, value_type ) \
CDSSTRESS_SplitListMap_RCU_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListMap_RCU_2( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type ) \
#define CDSSTRESS_SplitListMap( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListMap_HP( fixture, test_case, key_type, value_type ) \
#if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 0
# define CDSSTRESS_EllenBinTreeSet_HP_1( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_hp, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_dhp, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_rcu_gpb, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_hp, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_dhp, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_yield_rcu_gpb, key_type, value_type ) \
# define CDSSTRESS_EllenBinTreeSet_RCU_1( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpi, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpi_stat, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpi, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpi_stat, key_type, value_type ) \
+ CDSSTRESS_EllenBinTreeSet_SHRCU( fixture, test_case, key_type, value_type )
#else
# define CDSSTRESS_EllenBinTreeSet_HP_1( fixture, test_case, key_type, value_type )
CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpb_stat, key_type, value_type ) \
CDSSTRESS_EllenBinTreeSet_case( fixture, test_case, EllenBinTreeSet_rcu_gpt_stat, key_type, value_type ) \
CDSSTRESS_EllenBinTreeSet_RCU_1( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_EllenBinTreeSet_SHRCU( fixture, test_case, key_type, value_type )
#define CDSSTRESS_EllenBinTreeSet( fixture, test_case, key_type, value_type ) \
CDSSTRESS_EllenBinTreeSet_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpi_fixed_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_fixed_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_fixed_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashSet_fixed_SHRCU( fixture, test_case, key_type, value_type ) \
+
+ //CDSSTRESS_FeldmanHashSet_fixed_SHRCU( fixture, test_case, key_type, value_type ) \
#define CDSSTRESS_FeldmanHashSet_fixed_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_hp_fixed, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_stdhash, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_stdhash_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_stdhash_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashSet_stdhash_SHRCU( fixture, test_case, key_type, value_type )
+
+ //CDSSTRESS_FeldmanHashSet_stdhash_SHRCU( fixture, test_case, key_type, value_type )
#define CDSSTRESS_FeldmanHashSet_stdhash( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_stdhash_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_city128, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpb_city128_stat, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_case( fixture, test_case, FeldmanHashSet_rcu_gpt_city128_stat, key_type, value_type ) \
- CDSSTRESS_FeldmanHashSet_city_SHRCU( fixture, test_case, key_type, value_type )
+
+ //CDSSTRESS_FeldmanHashSet_city_SHRCU( fixture, test_case, key_type, value_type )
# define CDSSTRESS_FeldmanHashSet_city( fixture, test_case, key_type, value_type ) \
CDSSTRESS_FeldmanHashSet_city_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPI_less, key_type, value_type ) \
CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less, key_type, value_type ) \
CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPB_less_stat, key_type, value_type ) \
+ \
+ CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type ) \
# define CDSSTRESS_MichaelIterableSet_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Iterable_DHP_cmp, key_type, value_type ) \
CDSSTRESS_MichaelSet_case( fixture, test_case, MichaelSet_Lazy_RCU_GPT_less_stat, key_type, value_type ) \
\
CDSSTRESS_MichaelSet_RCU_1( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_MichaelSet_SHRCU( fixture, test_case, key_type, value_type ) \
#define CDSSTRESS_MichaelSet( fixture, test_case, key_type, value_type ) \
CDSSTRESS_MichaelSet_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpi_cmp_xorshift, key_type, value_type ) \
CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_cmp_xorshift, key_type, value_type ) \
CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpb_cmp_xorshift_stat, key_type, value_type ) \
+ CDSSTRESS_SkipListSet_SHRCU( fixture, test_case, key_type, value_type ) \
#else
# define CDSSTRESS_SkipListSet_HP_1( fixture, test_case, key_type, value_type )
CDSSTRESS_SkipListSet_case( fixture, test_case, SkipListSet_rcu_gpt_cmp_xorshift_stat, key_type, value_type ) \
CDSSTRESS_SkipListSet_RCU_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListSet_RCU_2( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_SkipListSet_SHRCU( fixture, test_case, key_type, value_type ) \
#define CDSSTRESS_SkipListSet( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SkipListSet_HP( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less, key_type, value_type ) \
CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_stat, key_type, value_type ) \
CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat, key_type, value_type ) \
+ \
+ CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
+
#else
# define CDSSTRESS_SplitListSet_HP_1( fixture, test_case, key_type, value_type )
CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat, key_type, value_type ) \
CDSSTRESS_SplitListSet_RCU_1( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListSet_RCU_2( fixture, test_case, key_type, value_type ) \
- CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
#define CDSSTRESS_SplitListSet( fixture, test_case, key_type, value_type ) \
CDSSTRESS_SplitListSet_HP( fixture, test_case, key_type, value_type ) \