#include <ctime>
#include <iomanip>
#include <mdclog/mdclog.h>
-#include <tbb/concurrent_unordered_map.h>
+//#include <tbb/concurrent_unordered_map.h>
-using namespace tbb;
+//using namespace tbb;
typedef struct statResult {
std::string ranName;
for (auto const &e : recvMessages) {
statResult_t result {};
result.ranName = e.first;
- result.receivedMessages = e.second;
+ result.receivedMessages = e.second.load(std::memory_order_acquire);
auto found = sentMessages.find(result.ranName);
if (found != sentMessages.end()) {
- result.sentMessages = found->second;
+ result.sentMessages = found->second.load(std::memory_order_acquire);
} else {
result.sentMessages = 0;
}
StatCollector& operator=(const StatCollector&)= delete;
private:
- tbb::concurrent_unordered_map<std::string, int> sentMessages;
- //std::unordered_map<std::string, int> sentMessages;
- //std::unordered_map<std::string, int> recvMessages;
- tbb::concurrent_unordered_map<std::string, int> recvMessages;
+ //tbb::concurrent_unordered_map<std::string, int> sentMessages;
+ std::unordered_map<std::string, std::atomic<int>> sentMessages;
+ std::unordered_map<std::string, std::atomic<int>> recvMessages;
+// tbb::concurrent_unordered_map<std::string, int> recvMessages;
std::vector<statResult_t> results;
~StatCollector() = default;
- void increment(tbb::concurrent_unordered_map<std::string, int> &map, const std::string &key);
+ void increment(std::unordered_map<std::string, std::atomic<int>> &map, const std::string &key);
};
-void StatCollector::increment(tbb::concurrent_unordered_map<std::string, int> &map, const std::string &key) {
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
+void StatCollector::increment(std::unordered_map<std::string, std::atomic<int>> &map, const std::string &key) {
if (map.empty()) {
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
map.emplace(std::piecewise_construct,
std::forward_as_tuple(key),
std::forward_as_tuple(1));
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
return;
}
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
auto found = map.find(key);
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
if (found != map.end()) { //inc
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
- map[key]++;
+ map[key].fetch_add(1, std::memory_order_release);
+ //map[key]++;
} else { //add
//sentMessages.emplace(std::make_pair(std::string(key), std::atomic<int>(0)));
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
-
map.emplace(std::piecewise_construct,
std::forward_as_tuple(key),
std::forward_as_tuple(1));
- if (mdclog_level_get() >= MDCLOG_DEBUG) {
- mdclog_write(MDCLOG_INFO, "in file %s at finction %s in line %d", __FILE__, __func__, __LINE__);
- }
}
}