Commit 6e0b58ba authored by Guolin Ke's avatar Guolin Ke
Browse files

thread-safe for set field of dataset

parent 962b7eb0
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <functional> #include <functional>
#include <string> #include <string>
#include <unordered_set> #include <unordered_set>
#include <mutex>
namespace LightGBM { namespace LightGBM {
...@@ -234,6 +235,8 @@ private: ...@@ -234,6 +235,8 @@ private:
std::vector<float> init_score_; std::vector<float> init_score_;
/*! \brief Queries data */ /*! \brief Queries data */
std::vector<data_size_t> queries_; std::vector<data_size_t> queries_;
/*! \brief mutex for threading safe call */
std::mutex mutex_;
}; };
......
...@@ -30,7 +30,6 @@ public: ...@@ -30,7 +30,6 @@ public:
Booster(const Dataset* train_data, Booster(const Dataset* train_data,
const char* parameters) { const char* parameters) {
std::lock_guard<std::mutex> lock(mutex_);
auto param = ConfigBase::Str2Map(parameters); auto param = ConfigBase::Str2Map(parameters);
config_.Set(param); config_.Set(param);
// create boosting // create boosting
......
...@@ -196,6 +196,7 @@ void Metadata::CheckOrPartition(data_size_t num_all_data, const std::vector<data ...@@ -196,6 +196,7 @@ void Metadata::CheckOrPartition(data_size_t num_all_data, const std::vector<data
void Metadata::SetInitScore(const float* init_score, data_size_t len) { void Metadata::SetInitScore(const float* init_score, data_size_t len) {
std::lock_guard<std::mutex> lock(mutex_);
// save to nullptr // save to nullptr
if (init_score == nullptr || len == 0) { if (init_score == nullptr || len == 0) {
init_score_.clear(); init_score_.clear();
...@@ -214,6 +215,7 @@ void Metadata::SetInitScore(const float* init_score, data_size_t len) { ...@@ -214,6 +215,7 @@ void Metadata::SetInitScore(const float* init_score, data_size_t len) {
} }
void Metadata::SetLabel(const float* label, data_size_t len) { void Metadata::SetLabel(const float* label, data_size_t len) {
std::lock_guard<std::mutex> lock(mutex_);
if (label == nullptr) { if (label == nullptr) {
Log::Fatal("label cannot be nullptr"); Log::Fatal("label cannot be nullptr");
} }
...@@ -228,6 +230,7 @@ void Metadata::SetLabel(const float* label, data_size_t len) { ...@@ -228,6 +230,7 @@ void Metadata::SetLabel(const float* label, data_size_t len) {
} }
void Metadata::SetWeights(const float* weights, data_size_t len) { void Metadata::SetWeights(const float* weights, data_size_t len) {
std::lock_guard<std::mutex> lock(mutex_);
// save to nullptr // save to nullptr
if (weights == nullptr || len == 0) { if (weights == nullptr || len == 0) {
weights_.clear(); weights_.clear();
...@@ -247,6 +250,7 @@ void Metadata::SetWeights(const float* weights, data_size_t len) { ...@@ -247,6 +250,7 @@ void Metadata::SetWeights(const float* weights, data_size_t len) {
} }
void Metadata::SetQueryBoundaries(const data_size_t* query_boundaries, data_size_t len) { void Metadata::SetQueryBoundaries(const data_size_t* query_boundaries, data_size_t len) {
std::lock_guard<std::mutex> lock(mutex_);
// save to nullptr // save to nullptr
if (query_boundaries == nullptr || len == 0) { if (query_boundaries == nullptr || len == 0) {
query_boundaries_.clear(); query_boundaries_.clear();
...@@ -270,6 +274,7 @@ void Metadata::SetQueryBoundaries(const data_size_t* query_boundaries, data_size ...@@ -270,6 +274,7 @@ void Metadata::SetQueryBoundaries(const data_size_t* query_boundaries, data_size
} }
void Metadata::SetQueryId(const data_size_t* query_id, data_size_t len) { void Metadata::SetQueryId(const data_size_t* query_id, data_size_t len) {
std::lock_guard<std::mutex> lock(mutex_);
// save to nullptr // save to nullptr
if (query_id == nullptr || len == 0) { if (query_id == nullptr || len == 0) {
query_boundaries_.clear(); query_boundaries_.clear();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment