Eliminate dependence on boost::interprocess #8223

In this repo, `boost::interprocess` was being used soley to make `uint32_t` operations atomic. So I replaced each instance of
`boost::interprocess::ipcdetail::atomic(...)32` with `std::atomic` methods. I replaced member declarations as applicable. For example,
when I needed to change a `volatile uint32_t` into a `std::atomic<uint32_t>`. Sometimes, a member was being used a boolean flag, so
I replaced it with `std::atomic<bool>`.

You may notice that I didn't touch `levin_client_async.h`. That is because this file is entirely unused and will be deleted in PR monero-project#8211.

Additional changes from review:
* Make some local variables const
* Change postfix operators to prefix operators where value was not need
This commit is contained in:
Jeffrey 2022-03-30 13:18:32 -05:00
parent 70ceab6c10
commit 17772ef53e
10 changed files with 43 additions and 50 deletions

View file

@ -30,7 +30,6 @@
#include <sstream>
#include <numeric>
#include <boost/interprocess/detail/atomic.hpp>
#include <boost/algorithm/string.hpp>
#include "misc_language.h"
#include "syncobj.h"
@ -271,13 +270,13 @@ namespace cryptonote
// restart all threads
{
CRITICAL_REGION_LOCAL(m_threads_lock);
boost::interprocess::ipcdetail::atomic_write32(&m_stop, 1);
m_stop = true;
while (m_threads_active > 0)
misc_utils::sleep_no_w(100);
m_threads.clear();
}
boost::interprocess::ipcdetail::atomic_write32(&m_stop, 0);
boost::interprocess::ipcdetail::atomic_write32(&m_thread_index, 0);
m_stop = false;
m_thread_index = 0;
for(size_t i = 0; i != m_threads_total; i++)
m_threads.push_back(boost::thread(m_attrs, boost::bind(&miner::worker_thread, this)));
}
@ -394,8 +393,8 @@ namespace cryptonote
request_block_template();//lets update block template
boost::interprocess::ipcdetail::atomic_write32(&m_stop, 0);
boost::interprocess::ipcdetail::atomic_write32(&m_thread_index, 0);
m_stop = false;
m_thread_index = 0;
set_is_background_mining_enabled(do_background);
set_ignore_battery(ignore_battery);
@ -435,7 +434,7 @@ namespace cryptonote
//-----------------------------------------------------------------------------------------------------
void miner::send_stop_signal()
{
boost::interprocess::ipcdetail::atomic_write32(&m_stop, 1);
m_stop = true;
}
extern "C" void rx_stop_mining(void);
//-----------------------------------------------------------------------------------------------------
@ -524,7 +523,7 @@ namespace cryptonote
//-----------------------------------------------------------------------------------------------------
bool miner::worker_thread()
{
uint32_t th_local_index = boost::interprocess::ipcdetail::atomic_inc32(&m_thread_index);
const uint32_t th_local_index = m_thread_index++; // atomically increment, getting value before increment
MLOG_SET_THREAD_NAME(std::string("[miner ") + std::to_string(th_local_index) + "]");
MGINFO("Miner thread was started ["<< th_local_index << "]");
uint32_t nonce = m_starter_nonce + th_local_index;

View file

@ -118,14 +118,14 @@ namespace cryptonote
};
volatile uint32_t m_stop;
std::atomic<bool> m_stop;
epee::critical_section m_template_lock;
block m_template;
std::atomic<uint32_t> m_template_no;
std::atomic<uint32_t> m_starter_nonce;
difficulty_type m_diffic;
uint64_t m_height;
volatile uint32_t m_thread_index;
std::atomic<uint32_t> m_thread_index;
volatile uint32_t m_threads_total;
std::atomic<uint32_t> m_threads_active;
std::atomic<int32_t> m_pausers_count;